Что такое код imap_listmailbox

Содержание

Что такое IMAP и POP?

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

IMAP и POP — это два метода доступа к электронной почте. Рекомендуется использовать IMAP, если вам требуется проверять почту с нескольких разных устройств (например, телефона, ноутбука и планшета).

IMAP позволяет получать доступ к электронной почте везде, где вы находитесь, с любого устройства. При чтении сообщения электронной почты с помощью IMAP вы не скачиваете его и не сохраняете на компьютере; Вместо этого вы читаете его из службы электронной почты. В результате вы можете проверять электронную почту с различных устройств в любом месте мира: на телефоне, компьютере, компьютере друга.

IMAP скачивает сообщение, только когда вы его щелкаете, и вложения не скачиваются автоматически. Так вы сможете проверять сообщения гораздо быстрее, чем с помощью POP.

POP связывается с вашей службой электронной почты и скачивает из нее все новые сообщения. После скачивания на компьютер с Windows или Mac OS сообщения удаляются из почтовой службы. Это значит, что после скачивания почтового сообщения к нему можно обращаться только с того же компьютера. Если вы попытаетесь обратиться к сообщению с другого устройства, ранее скачанные сообщения будут недоступны.

Отправленная почта хранится локально на компьютере с Windows или Mac OS, а не на почтовом сервере.

Многие поставщики услуг Интернета предоставляют учетные записи электронной почты, которые используют POP.

Учетные записи веб-почты или почтовые приложения

Gmail, Outlook.com, Hotmail.com и iCloud — это веб-почта. Вход в учетную запись веб-почты выполняется в Интернете.

Если у вас есть компьютер с Windows или Mac OS, вы, вероятно, использовали программу, например Outlook, Apple Mail или Thunderbird, для управления электронной почтой. Outlook, Apple Mail и Thunderbird — это приложениядля работы с электронной почтой: программы, устанавливаемые на компьютере для управления электронной почтой. Они взаимодействуют с помощью службы электронной почты, например Gmail или Outlook.com, для получения и отправки электронной почты.

В почтовое приложение вы можете добавить любую учетную запись электронной почты, чтобы управлять ею оттуда. Например, вы можете добавить в приложение Outlook или Apple Mail учетные записи веб-почты (Gmail, Outlook.com, Hotmail.com, AOL и Yahoo) и почтовые учетные записи, предоставленные вашей организацией.

Добавление учетных записей веб-почты в почтовые приложения, такие как Outlook, Apple Mail, Thunderbird

Когда вы добавляете учетную запись электронной почты в почтовое приложение, оно пытается настроить доступ методом IMAP без вашего участия.

Если приложению электронной почты не удается добавить свою учетную запись электронной почты, обычно это связано с тем, что учетная запись электронной почты настроена для доступа по протоколу POP. В этом случае необходимо обратиться к поставщику услуг электронной почты и узнать имя сервера POP и SMTP, чтобы можно было ввести информацию в почтовое приложение. Как правило, эти сведения выглядят примерно так:

Сервер входящей почты (IMAP): IMAP. _лт_ имя службы>. com

Сервер входящей почты (POP): pop. имя службы>.com

Сервер исходящей почты (SMTP): smtp. имя службы>.com

FPublisher

Web-технологии: База знаний

Документация PHP

imap_listmailbox

imap_listmailbox — Alias of imap_list()

Описание

This function is an alias of: imap_list().

Последние поступления:

ТехЗадание на Землю

Размещена 14 марта 2020 года

Пpоект Genesis (из коpпоpативной пеpеписки)

Шпаргалка по работе с Vim

Размещена 05 декабря 2020 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

Linux Optimization

Размещена 30 июля 2012 года

Пример работающего кода с imap

28.01.2010, 15:04

Перевести пример кода на PHP
Здравствуйте! Только стал изучать данный язык, никак не могу понять работу с классами. Нужно.

Ребята подскажите пример кода
вообщем смысл данного кода должен заключаться в следующем, если текст длинной более например 15.

Пример кода для обучения PHP
Могу немного наглеть,но просто просьба,кому не жалко написанный код(не бойтесь,использовать не.

Покажите пример кода PHP с использованием сессий.
Приветствую. Подскажите, плиз, простой пример сессии для использования на страницах сайта для.

Подскажите пример кода для реализации следущего (php)
Нужно чтобы при выборе позиции из выпадающего списка, из БД брался текст соответствующей позиции в.

Включение и отключение доступа по протоколу POP3 или IMAP4 к почтовым ящикам в Exchange Server Enable or disable POP3 or IMAP4 access to mailboxes in Exchange Server

После включения и настройки протокола POP3 или IMAP4 на сервере Exchange, как описано в статье Включение и Настройка POP3 на сервере Exchange Server , а также Включение и настройка IMAP4 на сервере Exchange, все почтовые ящики пользователей (за исключением администратора доступ к почтовому ящику) можно получить с помощью протокола POP3 или IMAP4. After you enable and configure POP3 or IMAP4 on an Exchange server as described in Enable and configure POP3 on an Exchange server and Enable and configure IMAP4 on an Exchange server, all user mailboxes (with the exception of the Administrator mailbox) can be accessed by using POP3 or IMAP4. Вы можете использовать описанные в этой статье процедуры, чтобы отключить доступ по протоколам POP3 и IMAP4 к определенным почтовым ящикам. You can use the procedures in this topic to disable POP3 and IMAP4 access to specific mailboxes.

Дополнительные сведения о протоколах POP3 и IMAP4 приведены в статье POP3 и IMAP4 в Exchange Server. For more information about POP3 and IMAP4, see POP3 and IMAP4 in Exchange Server.

Что нужно знать перед началом работы What do you need to know before you begin?

Предполагаемое время для завершения: 5 минут. Estimated time to complete: 5 minutes.

Чтобы открыть центр администрирования Exchange, обратитесь к центру администрирования Exchange в Exchange Server. To open the Exchange admin center (EAC), see Exchange admin center in Exchange Server. Чтобы открыть командную консоль Exchange, ознакомьтесь со статьей открытие консоли управления Exchange. To open the Exchange Management Shell, see Open the Exchange Management Shell.

Процедуры, описанные в этой статье, не распространяются на почтовый ящик администратора, потому что к нему нельзя подключиться по протоколу POP3 или IMAP4. The procedures in this topic don’t apply to the Administrator mailbox, because you can’t use POP3 or IMAP4 to connect to the Administrator mailbox. Это ограничение было намеренно включено в Exchange 2020 и Exchange 2020, чтобы повысить уровень безопасности почтового ящика администратора. This limitation was intentionally included in Exchange 2020 and Exchange 2020 to enhance the security of the Administrator mailbox.

Для выполнения этих процедур необходимы соответствующие разрешения. Сведения о необходимых разрешениях см. в статье раздел «Разрешения подготовки получателей» в статье Разрешения получателей. You need to be assigned permissions before you can perform this procedure or procedures. To see what permissions you need, see the «Recipient provisioning permissions» section in the Recipients Permissions topic.

Сочетания клавиш для процедур, описанных в этой статье, приведены в статье Сочетания клавиш в Центре администрирования Exchange. For information about keyboard shortcuts that may apply to the procedures in this topic, see Keyboard shortcuts in the Exchange admin center.

Возникли проблемы? Having problems? Обратитесь за помощью к участникам форумов Exchange. Ask for help in the Exchange forums. Посетите форумы на сервере Exchange Server. Visit the forums at Exchange Server.

Включение или отключение доступа к одному почтовому ящику по протоколу POP3 или IMAP4 Enable or disable POP3 or IMAP4 access to a single mailbox

Включение или отключение доступа к почтовому ящику по протоколу POP3 или IMAP4 в Центре администрирования Exchange Use the EAC to enable or disable POP3 or IMAP4 access to a mailbox

В Центре администрирования Exchange выберите элементы Получатели > Почтовые ящики. In the EAC, go to Recipients > Mailboxes.

В списке почтовых ящиков найдите нужный почтовый ящик. Для этого выполните одно из следующих действий: In the list of mailboxes, find the mailbox that you want to modify. You can:

Прокрутите список почтовых ящиков. Scroll through the list of mailboxes.

Нажмите **** кнопку Поиск поиска) и введите часть имени, адреса электронной почты или псевдонима пользователя. Click Search ( ) and enter part of the user’s name, email address, or alias.

Нажмите кнопку Дополнительные параметры значок Дополнительные параметры > ) Расширенный поиск , чтобы найти почтовый ящик. Click More options ( ) > Advanced search to find the mailbox.

Найдя почтовый ящик, который требуется изменить, выберите его и нажмите кнопку изменить ( редактирования). Once you’ve found the mailbox that you want to modify, select it, and then click Edit ( ).

В открывшемся окне свойств почтового ящика выберите Функции почтового ящика. In the mailbox properties window that opens, click Mailbox Features.

В разделе Возможность подключения электронной почты настройте один или несколько из этих параметров: In the Email connectivity section, configure one or more of the following settings:

POP3: чтобы отключить доступ по ПРОТОКОЛу POP3 к почтовому ящику, нажмите кнопку Отключить, а затем нажмите кнопку Да в появившемся предупреждении. POP3: To disable POP3 access to the mailbox, click Disable, and then click Yes in the warning message that appears. Если протокол POP3 уже отключен, нажмите Включить, чтобы включить его. If POP3 is already disabled, click Enable to enable it.

IMAP: чтобы отключить доступ по ПРОТОКОЛу IMAP4 к почтовому ящику, нажмите кнопку Отключить, а затем нажмите кнопку Да в появившемся предупреждении. IMAP: To disable IMAP4 access to the mailbox, click Disable, and then click Yes in the warning message that appears. Если протокол IMAP4 уже отключен, нажмите Включить, чтобы включить его. If IMAP4 is already disabled, click Enable to enable it.

выберите почтовый ящик > «Изменить» > «Функции почтового ящика» > «Возможность подключения электронной почты»» data-linktype=»relative-path»>

Когда закончите, нажмите кнопку Сохранить. When you’re finished, click Save.

Включение или отключение доступа к почтовому ящику по протоколу POP3 или IMAP4 с помощью командной консоли Exchange Use the Exchange Management Shell to enable or disable POP3 or IMAP4 access to a mailbox

Чтобы включить или отключить доступ по протоколу POP3 или IMAP4 к одному почтовому ящику, используйте следующий синтаксис: To enable or disable POP3 or IMAP4 access to a single mailbox use the following syntax:

В этом примере отключается доступ по протоколам POP3 и IMAP4 к почтовому ящику с именем Rand Захер. This example disables POP3 and IMAP4 access to the mailbox named Rand Zaher.

В этом примере включается доступ по протоколам POP3 и IMAP4 к почтовому ящику с именем Rand Захер. This example enables POP3 and IMAP4 access to the mailbox named Rand Zaher.

Дополнительные сведения см. в статье Set-CASMailbox. For more information, see Set-CASMailbox.

Включение или отключение доступа к нескольким почтовым ящикам по протоколу POP3 или IMAP4 Enable or disable POP3 or IMAP4 access to multiple mailboxes

Включение или отключение доступа к нескольким почтовым ящикам по протоколу POP3 или IMAP4 в Центре администрирования Exchange Use the EAC to enable or disable POP3 or IMAP4 access to multiple mailboxes

В Центре администрирования Exchange перейдите выберите элементы Получатели > Почтовые ящики. In the EAC, go to Recipients > Mailboxes.

В списке почтовых ящиков найдите нужные почтовые ящики. Для этого выполните одно из следующих действий: In the list of mailboxes, find the mailboxes that you want to modify. You can:

Прокрутите список почтовых ящиков. Scroll through the list of mailboxes.

Нажмите **** кнопку Поиск поиска) и введите часть имени, адреса электронной почты или псевдонима пользователя. Click Search ( ) and enter part of the user’s name, email address, or alias.

Нажмите кнопку Дополнительные параметры значок Дополнительные параметры > ) Расширенный поиск , чтобы найти почтовый ящик. Click More options ( ) > Advanced search to find the mailbox.

В списке почтовых ящиков выберите несколько почтовых ящиков одного типа (например, Пользователь). Например: In the list of mailboxes, select multiple mailboxes of the same type (for example, User) from the list. For example:

Выберите почтовый ящик. Удерживая клавишу SHIFT, выберите другой ящик, расположенный ниже в списке. Select a mailbox, hold down the Shift key, and select another mailbox that’s farther down in the list.

Выберите нужные почтовые ящики, удерживая клавишу CTRL. Hold down the CTRL key as you select each mailbox.

После выбора нескольких почтовых ящиков одного типа заголовок области сведений изменится на Массовое изменение. After you select multiple mailboxes of the same type, the title of the details pane changes to Bulk Edit.

В области сведений найдите POP3 или IMAP, нажмите Включить или Отключить, а затем ОК в появившемся предупреждении. In the details pane, go to POP3 or IMAP, click Enable or Disable, and then click OK in the warning message that appears.

Включение или отключение доступа к нескольким почтовым ящикам по протоколу POP3 или IMAP4 с помощью командной консоли Exchange Use the Exchange Management Shell to enable or disable POP3 or IMAP4 access to multiple mailboxes

Чтобы указать нужные почтовые ящики, можно использовать командлеты Get-Mailbox, Get-User и Get-Content. You can use the Get-Mailbox, Get-User, or Get-Content cmdlets to identify the mailboxes that you want to modify. Например: For example:

Илон Маск рекомендует:  caption в HTML

Чтобы отфильтровать почтовые ящики по подразделению, используйте параметр OrganizationalUnit . Use the OrganizationalUnit parameter to filter the mailboxes by organizational unit (OU).

Используйте параметр Filter для создания фильтров OPATH, определяющих почтовые ящики. Use the Filter parameter to create OPATH filters that identify the mailboxes. Дополнительные сведения см. в статье Filterable Properties for the -Filter Parameter. For more information, see Filterable Properties for the -Filter Parameter.

Используйте текстовый файл для указания почтовых ящиков. В каждой строке текстового файла указан один почтовый ящик (адрес электронной почты, имя или другой уникальный идентификатор), например: Use a text file to specify the mailboxes. The text file contains one mailbox (email address, name, or other unique identifier) on each line like this:

ebrunner@tailspintoys.com ebrunner@tailspintoys.com
fapodaca@tailspintoys.com fapodaca@tailspintoys.com
glaureano@tailspintoys.com glaureano@tailspintoys.com
hrim@tailspintoys.com hrim@tailspintoys.com

В этом примере отключается доступ по протоколам POP3 и IMAP4 для всех почтовых ящиков финансового подразделения в Северной Америке. This example disables POP3 and IMAP4 access to all user mailboxes in the North America\Finance OU.

В этом примере отключается доступ по протоколам POP3 и IMAP4 для всех почтовых ящиков отдела проектирования в штате Вашингтон. This example disables POP3 and IMAP4 access to all mailboxes in the Engineering department in Washington state.

В этом примере для отключения доступа к указанным почтовым ящикам по протоколу POP3 или IMAP4 используется текстовый файл C:\My Documents\Accounts.txt. This example uses the text file C:\My Documents\Accounts.txt to disable POP3 or IMAP4 access to the specified mailboxes.

Дополнительные сведения см. в статьях Get-Mailbox и Get-User. For more information, see Get-Mailbox and Get-User.

Повторный запуск служб POP3 и IMAP4 Restart the POP3 or IMAP4 services

После изменения параметров доступа к почтовому ящику по протоколам POP3 и IMAP4 нужно перезагрузить службы POP3 и IMAP4 на сервере. Для этого можно воспользоваться консолью «Службы» Windows или командной консолью Exchange. After you change the POP3 or IMAP4 access settings on a mailbox, you need to restart the POP3 and IMAP4 services on the server. You can do this by using the Windows Services console, or the Exchange Management Shell.

Перезапуск служб POP3 и IMAP4 с помощью консоли «Службы» Windows Use the Windows Services console to restart the POP3 or IMAP4 services

Откройте консоль «Службы Windows» на сервере Exchange Server. On the Exchange server, open the Windows Services console. Пример: For example:

Выполните команду services.msc в диалоговом окне выполнить , в окне командной строки или в командной консоли Exchange. Run the command services.msc from the Run dialog, a Command Prompt window, or the Exchange Management Shell.

Откройте диспетчер серверов и выберите Средства > Службы. Open Server Manager, and then click Tools > Services.

В списке служб выполните одно или оба следующих действия: In the list of services, do one or both of the following actions:

POP3: POP3:

Выберите Microsoft Exchange POP3 и нажмите Действие > Перезапустить. Select Microsoft Exchange POP3, and then click Action > Restart.

Выберите Внутренний POP3 Microsoft Exchange и нажмите Действие > Перезапустить. Select Microsoft Exchange POP3 Backend, and then click Action > Restart.

IMAP4: IMAP4:

Выберите Microsoft Exchange IMAP4 и нажмите Действие > Перезапустить. Select Microsoft Exchange IMAP4, and then click Action > Restart.

Выберите Внутренняя служба IMAP4 Microsoft Exchange и нажмите Действие > Перезапустить. Select Microsoft Exchange IMAP4 Backend, and then click Action > Restart.

Перезапуск служб POP3 и IMAP4 с помощью командной консоли Exchange Use the Exchange Management Shell to restart the POP3 or IMAP4 services

Чтобы перезапустить службы POP3, выполните следующую команду: To restart the POP3 services, run the following command:

Чтобы перезапустить службы IMAP4, выполните следующую команду: To restart the IMAP4 services, run the following command:

Дополнительные сведения об этом командлете см. в статье Restart-Service. For more information about this cmdlet, see Restart-Service.

Чтобы убедиться, что службы POP3 или IMAP4 успешно перезапущены, выполните следующую команду: To verify that you’ve successfully restarted the POP3 or IMAP4 services, run the following command:

Как проверить, что все получилось? How do you know this worked?

Чтобы убедиться, что доступ к почтовому ящику по протоколу POP3 или IMAP4 включен или отключен, выполните одно из следующих действий: To verify that you’ve enabled or disabled POP3 or IMAP4 access to a mailbox, use any of the following procedures:

> В центре администрирования Exchange перейдите в раздел почтовые ящики > получателей > и выберите](../../media/ITPro_EAC_EditIcon.png) > пункт изменить ![значок редактирования почтовый ящик функции > подключения к электронной почте. In the EAC, go to Recipients > Mailboxes > select the mailbox > click Edit > Mailbox features > Email connectivity.

Если для почтового ящика включен доступ по протоколу POP3, вы увидите сообщение POP3: включено и ссылку Отключить. Если доступ по протоколу POP3 отключен, вы увидите сообщение POP3: отключено и ссылку Включить. If POP3 access is enabled for the mailbox, you’ll see POP3: Enabled and the Disable link. If POP3 access is disabled, you’ll see POP3: Disabled and the Enable link.

Если для почтового ящика включен доступ по протоколу IMAP4, вы увидите сообщение IMAP4: включено и ссылку Отключить. Если доступ по протоколу IMAP4 отключен, вы увидите сообщение IMAP4: отключено и ссылку Включить. If IMAP4 access is enabled for the mailbox, you’ll see IMAP4: Enabled and a Disable link. If IMAP4 access is disabled, you’ll see IMAP4: Disabled and the Enable link.

выберите почтовый ящик > «Изменить» > «Функции почтового ящика» > «Возможность подключения электронной почты»» data-linktype=»relative-path»>

В командной консоли Exchange замените _ _ на идентификатор почтового ящика (например, имя, псевдоним или адрес электронной почты) и выполните следующую команду: In the Exchange Management Shell, replace with the identity of the mailbox (for example, name, alias, or email address), and run the following command:

Используйте тот же фильтр, что и для определения почтовых ящиков, но вместо командлета Get-CasMailbox используйте Set-CasMailbox. Например: Use the same filter that you used to identify the mailboxes, but use the Get-CasMailbox cmdlet instead of Set-CasMailbox. For example:

Чтобы увидеть все почтовые ящики, для которых отключен доступ по протоколам POP3 и IMAP4, выполните такую команду в командной консоли Exchange: In the Exchange Management Shell, run this command to show all mailboxes where POP3 and IMAP4 access is disabled:

listMailboxes

Нестатический метод, возвращает список папок в ящике.

Параметры

Параметр Описание Версия
$mailbox Шаблон имени почтового ящика.
$error Сообщение об ошибке.

Примеры

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

IMAP: трудности перехода

Какие грабли зарыты в IMAP

Уже некоторое время IMAP работает в Почте Mail.Ru в полную силу, и я готов рассказать о том, с какими проблемами мы столкнулись при его запуске. Часть из них была связана с особенностями самого протокола и с его историей, другие были обусловлены спецификой взаимодействия IMAP с нашим хранилищем. Отдельная категория трудностей вызвана многообразием почтовых клиентов.

За подробностями — добро пожаловать под кат.

Нынешний запуск IMAP — наш второй подход к снаряду. В прошлый раз мы взяли сервер Dovecot и попробовали заточить его под себя. Результат нас не устроил: с нашими нагрузками и нашей инфраструктурой он сочетался плохо. В этот раз мы решили выбрать другой путь, и написали собственное решение.

IMAP мы запустили в мае, но анонсировали только в июне. Фактически, майская аудитория — это наши сотрудники и те пользователи, у которых клиенты автоматически определили наличие IMAP в нашей Почте и подключили к нему новые добавленные аккаунты.

Трудности, специфичные для протокола IMAP

1. Громоздкость самого протокола

Первая версия протокола IMAP появилась в 1986 году. В данный момент актуален стандарт IMAP версии 4rev1, который был обновлен в 2003 году. За такой долгий срок стандарт существенно разросся: его текущая версия насчитывает порядка 200 страниц.

Сейчас многие моменты, описанные в стандарте, устарели — в сегодняшних условиях они уже не являются необходимостью. Например, в протоколе предусмотрен возврат количества строк и MD5-суммы частей письма — функционал, который фактически не используется в современных клиентах.

Кроме того, существует множество опциональных расширений протокола. Некоторые из них, по сути, являются необходимыми для удобной работы с почтовым ящиком.

Чтобы побороть историческое наследие, нам пришлось реализовать несколько расширений. Одно из них — UID+: когда мы копируем или добавляем письмо, мы возвращаем ID нового письма, которое появилось на сервере в результате копирования или добавления. Это позволяет нам сэкономить на ресурсоемкой операции поиска, которую приходилось проводить клиенту, чтобы распознать, какое именно письмо было добавлено.

2. Отсутствие стандартного паттерна работы с сервером

IMAP предоставляет множество способов решить одну и ту же задачу и, как следствие, практически у всех клиентов паттерн работы различен. Также важно, что паттерны работы существенно отличаются от того, как работает веб-почта или POP3.

Более половины приходится на долю клиентов под устройства Apple: причина в том, что у них хорошо работает автоопределение IMAP. Outloook же, напротив, по умолчанию работает по POP3, и настраивать IMAP нужно руками.

Здесь можно выделить 2 основные категории: десктопные клиенты, которые сразу запрашивают информацию обо всех письмах в ящике или папке, и мобильные клиенты, которые изначально запрашивают информацию только о самых новых письмах. Далее нам оставалось изучить запросы, которые они делают, чтобы обновить состояние, как именно они вытягивают информацию о письмах.

Почему для нас это было необходимым шагом? При скромных нагрузках (например, если сервер обслуживает корпоративную почту небольшой компании) вопрос оптимальности стоит не так остро. Однако при наших объемах оптимальность становится критичной: следовательно, нам нужно было изучить паттерны работы всего зоопарка почтовых клиентов, обращающихся к хранилищу.

3. Количество одновременных сессий

По стандарту, минимальный таймаут сервера — 30 минут. Кроме того, один клиент может держать сразу несколько соединений к серверу (в протоколе не указано максимальное количество разрешенных соединений). Фактически, в нашем масштабе, это означает, что один сервер должен оптимально работать с десятками тысяч одновременных соединений. При работе в синхронном режиме такое количество соединений просто поглотило бы все ресурсы.

Для решения этой проблемы я написал библиотеку для асинхронной работы, построенную на базе edge-triggered epoll. Изначально я ставил перед собой задачу сделать библиотеку, при помощи которой можно было бы в будущем за пару дней написать свой асинхронный сервер для решения других задач, помимо IMAP; в результате практически весь код можно использовать для написания других сервисов.

4. Невозможность однозначно идентифицировать клиент

Наш сервер поддерживает расширение ID, которое позволяет нам идентифицировать примерно половину клиентов. К сожалению, другая половина об этом расширении не знает (из популярных можно назвать, например, Outlook).
Понимание того, с каким клиентом мы работаем, позволяет обойти его характерные баги, а также предсказать, каким будет паттерн работы в рамках данной сессии и, соответственно, оптимизировать работу. Для нас это критично, поэтому, если клиент не называет ID, мы стараемся идентифицировать его другими путями (в случае Outlook — по тегам).

5. Отсутствие команды перемещения сообщений

В клиентах перемещение реализовано через копирование+удаление. Нам, разумеется, хочется, чтобы при этом копия письма помещалась в нужную папку, а оригинал удалялся и не захламлял корзину. С другой стороны, иногда сам пользователь копирует письмо в новую папку, а затем удаляет оригинал: в этом случае удаленное письмо должно помещаться в корзину.
Чтобы различать эти два кейса, после копирования мы в этой же сессии помечаем письмо специальным внутренним флажком. Когда сам пользователь копирует письмо и удаляет оригинал, клиент, как правило, обновляет список писем. При обновлении флажок автоматически сбрасывается, а удаленное письмо оказывается в корзине. Если же письмо (в рамках перемещения) удаляет клиент, обновления не происходит, и письмо, помеченное флажком, удаляется окончательно.

Трудности, связанные с адаптацией текущего хранилища писем и индексов

1. Идентификация сообщений

Для работы по IMAP необходимо было поддержать два вида идентификаторов сообщений: порядковый номер, который может отличаться от сессии к сессии, а также уникальный номер, который сохраняется на все время жизни сообщения. Оба идентификатора должны удовлетворять довольно строгим критериям, которые не соответствовали схеме, используемой веб-почтой и POP3-сервером.

Наиболее рациональным оказывается держать в оперативной памяти весь набор порядковых номеров, их соответствие внутренним идентификаторам, а также IMAP ID. При открытии папки мы вытягиваем из хранилища список всех писем, наши внутренние идентификаторы, IMAP ID, флажки и размер сообщения — все то, что хочется отдавать без лишних запросов.

Обо всех изменениях порядкового номера в рамках одной сессии мы должны оповещать клиент. Согласно стандарту, последовательность IMAP ID должна соответствовать последовательности порядковых номеров. Порядковые номера мы получим, отсортировав список писем по уникальным номерам. Когда клиент выдает новую команду, мы заново открываем соединение с хранилищем, запрашиваем время последних изменений, которые были сделаны в ящике. Если изменений со времени последнего такого запроса не было, то мы просто возвращаем ответ на команду. В ином случае мы заново запрашиваем список сообщений в папке и сравниваем с аналогичным списком клиента. Далее мы либо возвращаем информацию об изменениях, либо, если протокол не позволяет этого сделать сразу, делаем у себя пометку о том, что письмо удалено, и ждем подходящего момента, чтобы сообщить об этом клиенту.

Из-за такой специфики — письма уже нет в ящике, но клиент об этом еще не узнал — клиент может запросить данные об уже удаленном письме. Более того, некоторые из них испытывали серьезные проблемы, если ответа на их запрос не поступало. Чтобы клиент не ломался, мы в ответ на подобные запросы возвращаем заглушки. Клиент получает нужную ему для нормальной работы информацию, а уже при следующем обновлении списка писем (оно, как правило, происходит сразу же) удаляет из него сообщение.

2. Необходимость оптимально возвращать информацию о MIME-структуре письма

Практически все клиенты запрашивают информацию о структуре письма. Часто в рамках первой сессии они запрашивают такую информацию сразу обо всех письмах в папке. Парсить письмо на каждый такой запрос было бы крайне неоптимально.
Вместо этого мы сделали кэш MIME-структур. Наличие кэша помогло нам побороть сразу несколько трудностей, связанных с особенностями IMAP — в частности, отсутствие стандартного паттерна работы с сервером: поскольку часть информации хранится в кэше, это помогает нивелировать нагрузку, связанную с разными паттернами работы клиентов.

Сейчас мы кэшируем до 50 сообщений. Почему не 2-3? Дело в том, что некоторые клиенты сначала запрашивают структуру письма, а потом тело, причем сразу для нескольких сообщений; максимальное число писем в такой «пачке» обычно составляет 50 штук.

3. Оптимальная отдача частей письма

Часто клиенты просят лишь текстовые части письма, которые могут находиться в конце самого сообщения. Для отображения сниппетов клиенты могут просить текстовые части сразу у 50-200 писем. Читать весь файл сообщения целиком (и обрабатывать 10 МБ письма для того, чтобы отдать 10 КБ текста) при этом не хочется; использовать индекс для определения позиции части внутри файла при каждом запросе также было бы накладно. В этой ситуации также спасает кэш структуры письма.
Преимущества такого подхода особенно наглядны тогда, когда клиент подгружает сниппеты для нескольких десятков писем: если бы мы не использовали кэш структуры, то для этого приходилось бы просмотреть много мегабайт и пожертвовать скоростью.

Для экономии места в наших хранилищах base64-части хранятся в декодированном виде внутри письма: при работе с веб-почтой это позволяет отдавать аттачи без лишнего перекодирования. Нужно было сделать схему отдачи частей с учетом этого перекодирования. Мы написали потоковое перекодирование на IMAP-сервере. Здесь также помог кэш — благодаря ему мы без перечитывания структуры можем понять, в каком виде (бинарном или нет) хранится тот или иной фрагмент.

4. Особенности работы некоторых клиентов

Некоторые клиенты не полностью соответствуют стандарту RFC: например, стандартные клиенты Android версий 2.2 — 2.3 не могут корректно отображать письма без возврата некоторых необязательных полей. Основная трудность заключалась в том, чтобы определить, какие именно поля каждый из таких клиентов считает для себя обязательными: приходилось решать это методом перебора.

Выше уже упоминалось о том, что у клиентов могут быть различные подходы к удалению писем: одни перемещают их в корзину, другие — удаляют сразу и безвозвратно. При этом некоторые клиенты не понимают стандартное расширение XLIST, которое мы поддерживаем, позволяющее определить, какая именно папка является корзиной. Вместо этого они используют в качестве корзины свою папку (так себя ведет, например, Sparrow).

Интересно ведет себя Outlook: по команде удаления письма не перемещаются в корзину, а помечаются как перечеркнутые, и затем удаляются позже. Выяснилось, что для пользователей это выглядит, как баг — многие просто не понимают, что делать дальше и как добиться того, чтобы клиент вел себя привычным образом и письма оказались в корзине.

Илон Маск рекомендует:  Что такое код xpath_eval

В условиях такого разнообразия нам также было необходимо эмпирически понять, как ведет себя каждый из клиентов, и подстроиться под эти варианты — причем таким образом, чтобы пользователь мог быть уверен: независимо от того, в каком клиенте он работает, почта отреагирует на его действия привычно и предсказуемо (в данном случае — удаленное письмо окажется к корзине). Решали мы это, пробуя различные ответы через тестовый прокси-сервер и отслеживая реакцию клиента на каждый из вариантов.

То, что мы вынесли для себя: IMAP — достаточно «развесистая» штука, с множеством исторических особенностей, нажитых за 26 лет, которые умножаются на разнообразие почтовых клиентов. При наших нагрузках это выливается в то, что брать готовое решение и пытаться заточить его под себя нерационально: в лучшем случае объем работы будет таким же, как при самостоятельной разработке решения. Этим путем мы и пошли :)

imap_getmailboxes

imap_getmailboxes — Read the list of mailboxes, returning detailed information on each one

Описание

Gets information on the mailboxes.

Список параметров

Поток IMAP, полученный из imap_open() .

ref should normally be just the server specification as described in imap_open()

Определяет начало поиска в иерархии почтовых ящиков.

Есть два специальных символа, которых можно использовать при передаче как часть pattern: ‘*‘ и ‘%‘. ‘*‘ возвращает все почтовые ящики. Если вы передадите pattern как ‘*‘, то получите полный список иерархии почтовых ящиков. ‘%‘ вернет только текущий уровень. ‘%‘, переданный как параметр pattern, вернет только самый почтовые ящики только на самом верхнем уровне; ‘

/mail/%‘ на UW_IMAPD вернет все ящики в директории

/mail , кроме тех, которые находятся в ее поддиректориях.

Возвращаемые значения

Returns an array of objects containing mailbox information. Each object has the attributes name, specifying the full name of the mailbox; delimiter, which is the hierarchy delimiter for the part of the hierarchy this mailbox is in; and attributes. Attributes is a bitmask that can be tested against:

LATT_NOINFERIORS — This mailbox contains, and may not contain any «children» (there are no mailboxes below this one). Calling imap_createmailbox() will not work on this mailbox.

LATT_NOSELECT — This is only a container, not a mailbox — you cannot open it.

LATT_MARKED — This mailbox is marked. This means that it may contain new messages since the last time it was checked. Not provided by all IMAP servers.

LATT_UNMARKED — This mailbox is not marked, does not contain new messages. If either MARKED or UNMARKED is provided, you can assume the IMAP server supports this feature for this mailbox.

Примеры

Пример #1 imap_getmailboxes() example

IMAP Module

The CommuniGate Pro IMAP module implements an IMAP server. IMAP servers allow client applications (mailers) to retrieve messages from account mailboxes using the IMAP4rev1 Internet protocol (RFC2060) via TCP/IP networks.

The IMAP protocol allows client applications to create additional account mailboxes, to move messages between mailboxes, to mark messages in mailboxes, to search mailboxes, to retrieve MIME structure of stored messages, and to retrieve individual MIME components of messages stored in account mailboxes.

The CommuniGate Pro IMAP module supports both clear text and secure (SSL/TLS) connections.

Internet Message Access Protocol (IMAP)

The Internet Message Access Protocol allows client computers to work with messages stored in mailboxes on remote mail servers. A computer running a mailer (mail client) application connects to the mail server computer and provides account (user) name and the password. If access to the specified user account is granted, the mail application sends protocol commands to the mail server. These protocol commands tell the server to list all messages in the mailbox, to retrieve certain messages, to delete messages, to search for messages with the certain attributes, to move messages between mailboxes, etc.

Configuring the IMAP module

Use the WebAdmin Interface to configure the IMAP module. Open the Access page in the Settings realm:

Use the Log setting to specify the type of information the IMAP module should put in the Server Log. Usually you should use the Major (message transfer reports) or Problems (message transfer and non-fatal errors) levels. But when you experience problems with the IMAP module, you may want to set the Log Level setting to Low-Level or All Info: in this case protocol-level or link-level details will be recorded in the System Log as well. When the problem is solved, set the Log Level setting to its regular value, otherwise your System Log files will grow in size very quickly.

The IMAP module records in the System Log are marked with the IMAP tag.

When you specify a non-zero value for the Maximum Number of Channels setting, the IMAP module creates a so-called «Listener». The module starts to accept all IMAP connections that mail clients establish in order to retrieve mail from your server. The setting is used to limit the number of simultaneous connections the IMAP module can accept. If there are too many incoming connections open, the module will reject new connections, and the mail client should retry later.

By default, the IMAP module Listener accepts clear text connections on the TCP port 143, and secure connections — on the TCP port 993. Follow the listener link to tune the IMAP Listener.

The IMAP module supports the STARTTLS command that allows client mailers to establish a connection in the clear text mode and then turn it into a secure connection.

Send 'Running' every If this setting is not set to Never, the IMAP module monitors how long it take to execute the APPEND, COPY, and SEARCH operations. If any of these operations takes longer than the specified period of time, the module sends an «untagged» response to the client application. This feature can be used to prevent client application time-outs, and it can also help in dealing with various NAT boxes that tend to close connections if they show no activity.

MultiAccess

While many other IMAP servers «lock» opened mailboxes, the CommuniGate Pro IMAP module is designed to provide simultaneous access to any mailbox for any number of clients.

The IMAP module uses the CommuniGate Pro Mailbox Manager that provides simultaneous access for all types of protocols and clients. See the Mailboxes section for the details.

Access Control Lists

The IMAP module supports RFC2086 (IMAP4 ACL extension). This protocol extension allows IMAP users to grant access to their mailboxes to other users.

See the Mailboxes section for the detailed description of mailbox ACLs.

In order to set Access Rights, a client should use a decent IMAP client that supports the ACL protocol extension. If such a client is not available, mailbox access rights can be set using the WebUser Interface.

Foreign (Shared) and Public Mailboxes

CommuniGate Pro allows account users to access Mailboxes in other Accounts. See the Mailboxes section for the details.

Many popular IMAP clients do not support foreign Mailboxes. There is a workaround for IMAP mailers that use the «subscription» scheme. Subscription is a list of mailbox names that the mailer keeps on the server. Usually, mailers build the subscription list when you configure them for the first time. Later, they show only the mailboxes included into the subscription list.

By using a different IMAP client or the WebUser Interface, a user can add a foreign mailbox name (such as

public/news/company) to the subscription list. This will make the old IMAP client show the foreign mailbox along with the regular account mailboxes, and the user will be able to work with that foreign mailbox.

Some IMAP clients (such as Microsoft Outlook and Outlook Express) do not support foreign mailboxes at all. To let those clients access shared mailboxes in other Accounts, Mailbox Aliases can be used.

User Authentication

The IMAP module allows users to employ all authentication methods supported with the CommuniGate Pro Server.

If the Domain CLRTXT Login Method option is switched off, and the connection is not encrypted using SSL/TLS, the Server adds the LOGINDISABLED keyword into the list of its supported capabilities.

Non-Mail Mailboxes

The CommuniGate Pro IMAP module provides access to Mailboxes of all Classes (Calendar, Contacts, etc.). Some clients and/or users can be confused when they see a non-Mail Mailbox.

The module includes non-Mail Mailboxes into its IMAP LIST command response if:

  • the Account Non-Mail Mailboxes visible in IMAP setting is enabled, or
  • the IMAP LIST command has the CLASSextension, or
  • the IMAP ENABLE EXTENSIONScommand has been executed.

Notification Alerts

The CommuniGate Pro IMAP module checks for any pending alert message sent to the authenticated Account. The alert messages are transferred to the client mailer using the standard IMAP [ALERT] response code.

The CommuniGate Pro IMAP module checks for alert messages right after the user is authenticated, and it can detect and send alert messages at any time during an IMAP session.

Login Referrals

The IMAP module supports RFC2221 (Login Referrals).
As explained in the Access section all user addresses provided with mail clients are processed with the Router.
If the specified user name is routed to an external Internet address (handled with the SMTP module) the IMAP module returns a negative response and provides a login referral. If an IMAP client supports login referrals, it will automatically switch to the new address.

Sample: A user account j.smith has been moved from your server to the account John at the othercompany.com server. In order to reroute the user mail you have created an alias record in the Router:
= John@othercompany.com
Now, when this user tries to connect to his old j.smith account on your server, the server rejects the user name, but provides a login referral:
1234 NO [REFERRAL IMAP://John;AUTH=*@othercompany.com/] account has been moved to a remote system
If the mail client supports login referrals, it will automatically try to connect to the server othercompany.com as the user John.

Monitoring IMAP Activity

You can monitor the IMAP module activity using the WebAdmin Interface. Click the Access link in the Monitors realm to open the IMAP Monitoring page:

ID This field contains the IMAP numeric session ID. In the CommuniGate Pro Log, this session records are marked with the IMAP-nnnnn flag, where nnnnn is the session ID. Address This field contains the IP address the client has connected from. Account This field contains the name of the client Account (after successful authentication). Connected This field contains the connection time (time since the client opened this TCP/IP session). Status This field contains either the name of the operation in progress or, if there is not pending operation, the current session status (Authenticating, Selected, etc.) Running If there is an IMAP operation in progress, this field contains the time since operation started.

If an IMAP connection is used for a MAPI session, the connection row is displayed with a green background.

The IMAP activity statistics is available via the CommuniGate Pro SNMP agent.

IMAP Implementation Details

The CommuniGate Pro IMAP module implements many IMAP extensions. Some of these extenstions work in the implementation-specific manner.

QUOTA Each account has its own Quota Root access right. NAMESPACE The standard CommuniGate Pro «account name» prefix proper Domain. UNSELECT This IMAP command is equivalent to the CLOSE command, but it does not expunge any message marked as \Deleted

Additional IMAP Extensions

The CommuniGate Pro IMAP module provides several protocol extensions that are not part of the IMAP standard and are not included into the existing IMAP Extention standards.

UNSELECT This IMAP command is equivalent to the CLOSE command, but it does not expunge any message marked as \Deleted COPY The ENCRYPTED certificateData parameter can be specified after the target mailbox name. certificateData is either a base64-encoded PKI Certificate, or the asterisk (*) symbol, referring to the personal S/MIME Certificate of the authenticated user.
The copied messages are S/MIME-encrypted using the specified certificate. MOVE, UID MOVE These IMAP commands are equivalent to the COPY commands, but if messages have been copied succesfully, they are deleted. If messages are moved within the same Account, the mailbox storage Quota is not checked. STATUS The STATUS command can use the following additional data item names: INTERNALSIZE The data item included into the response is a number. This number specifies the size of the mailbox as it is stored on the server. This size is close to, but not exactly the same as the summ of the RFC822.SIZE attributes of all messages stored in the mailbox. OLDEST The data item included into the response is a date_time string. It specifies the INTERNALDATE of the oldest message stored in the mailbox. If the mailbox has no messages, this data item is not included into the response. UNSEENMEDIA The data item included into the response is the number of messages that have the Media flag set but do not have the Seen flag set.

Example: A001 STATUS mailbox (UNSEEN OLDEST INTERNALSIZE UNSEENMEDIA)
* STATUS mailbox (UNSEEN 14 OLDEST "23-Feb-2002 07:59:42 +0000" INTERNALSIZE 2345678 UNSEENMEDIA 1)
A001 OK completed
LIST The LIST command can use additional options along with the options specified in the LISTEXT extension standard: UIDVALIDITY, CLASS, MESSAGES, UIDNEXT, UNSEEN, INTERNALSIZE, OLDEST, UNSEENMEDIA

Работа с входящей почтой через протокол IMAP средствами PHP

На днях мне пришло задание написать небольшой модуль на PHP, который бы позволил работать с входящей почтой. Немного по гуглив я увидел что для данного задания мне подходит один из протоколов POP3 и IMAP .
Но выбор был очевиден что использовать я буду IMAP так как он более функциональный и современней, протокола POP3.

Теперь мне надо было быстренько разобраться как работать с протоколам IMAP , как получить письма из почтового сервера Yandex/Google.

Для более удобной работы я выбрал библиотеку PhpImap, так как она может быстро и легко реализует все нужные для меня задачи.

Подключение к почтовому серверу.

Теперь когда мы определились с выбором протокола и выбором библиотеки, будем пробовать подключатся к почтовому серверу.

Для полноценной работы PHP с протоколом IMAP, необходимо подключить расширение php_imap.dll/imap.so в файле php.ini.

Для начало попробуем подключится к Yandex почте так как у меня меньше всего возникло с ней проблем.

Как мы видим конструктор класса Mailbox принимает следующие аргументы:

  • MAIL_IMAP_PATH — Cодержит в себе адрес сервера (MAIL_IMAP_SERVER), порт подключения (MAIL_IMAP_SERVER_PORT), тип соединения (imap) и показываем что соединение будет зашифровано (ssl). После фигурных скобок указываем папку к которой будем подключаться, в данном случае к входящим сообщениям (INBOX).
  • MAIL_IMAP_LOGIN — Почтовый ящик которому будем подключатся.
  • MAIL_IMAP_PASS — Пароль (чаще всего это пароль от почтового ящика).
  • __DIR__ — Это путь к папке в которой будут сохраняться вложенные файлы и почтовые сообщения.

После этого мы проверим, создалось ли наше подключение через метод getImapStream() если по какой-то причине подключения не создастся то приложение выбрасывает исключения с причиной не удачного подключения.

Важно учесть во внимание то что в настройках Yandex почты у вас может быть отключена возможность подключения по протоколу IMAP.

Теперь давайте сравним подключение к почте Gmail.

Как мы видим оно практически не отличается от предыдущего подключения, но скорей всего у Вас сработает исключение при подключении к серверу.
Это проблема связана с тем что в Gmail работа протокола IMAP отключена по умолчанию. Включить её можно в настройках во вкладке Пересылка и POP/IMAP в опции Доступ по протоколу IMAP ⇒ Включить IMAP.

После того когда мы включили работу по протоколу IMAP нам надо создать пароль приложение. Для того чтобы его можно было создать нам необходимо сделать двух факторную авторизацию для данного профиля. После чего можно приступить к его созданию. Когда мы создадим новый пароль для приложения нам необходимо его будет вписать в константу MAIL_IMAP_PASS для подключения к серверу.

Учтите что при создании пароля приложений у Вас может быть так и не получится подключиться к серверу это связно с тем что данный пароль еще не применялся окончательно к сервису Gmail обычно это занимает 5-60 минут.

Илон Маск рекомендует:  Шаблоны HTML5

Выборка данных

После успешного подключения, мы можем выполнить запрос для получения потовых сообщений из сервера. Для этого мы будем использовать метод searchMailBox(string $criteria) который по сути является оберткой метода imap_search. Тут важно понять что аргумент $criteria является неким критерием поиска нужных нам сообщений, сам метод возвращает идентификаторы элементов которые в последствии нам пригодятся для получения детальной информации почтового сообщения.

Как Вы уже догадались тут мы получаем все сообщения.
А теперь давайте попробуем разобраться и с другими не менее важными критериями поиска:

Данный пример хорошо отражает основы использование критериев поиска.

Получение информации

Теперь когда у нас есть массив идентификаторов сообщений мы готовы его обработать:

Вот мы и получили сообщения из нашего письма и его вложения без всяких заморочек.

Дополнительные возможности.

В данной библиотеке также присутствие ряд полезных методов для более удобной работы с почтовыми сообщениями:

Сохраняем сообщения по его ид.

Устанавливаем сообщения как непрочитанное по его id.

Устанавливаем сообщения как прочитанное по его id.

Устанавливаем на сообщение пометку по его id.

Удаляем сообщения по его id.

Естественно мы здесь рассмотрели только незначительную часть но очень важную при работе с входящими почтовыми сообщениями. Также вы можете скачать рассмотренное нами приложение.

АйТи бубен

Инструменты пользователя

Инструменты сайта

Содержание

Команды IMAP

Протокол IMAP (Internet Mail Access Protocol) описывается в RFC 2060.

В отличии от POP3, который просто скачивает входящие письма и сохраняет их локально, с IMAP вы работаете с почтой непосредственно на сервере

Как и POP3, протокол IMAP использует концепцию клиент-сервер с набором команд. С помощью команд осуществляется передача сообщений электронной почты от сервера клиенту. Клиент устанавливает для этой цели TCP-соединение с портом 143 на сервере. Далее сервер должен ответить специальным сообщением-приглашением.

В строке 1 показана команда на открытие сеанса с помощью telnet с портом 143 (порт IMAP по умолчанию). Строка 5 отображает приглашение, выданное сервером IMAP. В строке 6 клиентом задана команда закончить сеанс с сервером. Затем сервер посылает сообщение об окончании сеанса (строка 7) и закрывает соединение с клиентом.

Каждая команда, выдаваемая клиентом, предваряется уникальным идентификатором. Сервер может затем использовать этот идентификатор в своих ответах, что позволяет клиенту определить, к какой команде относится ответ сервера. Это особенно важно при выполнении сервером нескольких команд за сеанс. Идентификатор обычно представляет собой короткую строку алфавитно-цифровых символов, которая генерируется клиентом. Так, в строке 6 листинга 7.1 клиентом был выбран идентификатор a001. Если бы клиенту потребовалось задавать и другие команды, то следующим идентификатором был бы a002 и т.д. Часто для упрощения идентификаторы команд в течение сеанса IMAP просто последовательно увеличивают один из своих разрядов.

После установления соединения клиент находится в состоянии ожидания проверки подлинности, так как для выполнения каких-либо операций со своим почтовым ящиком на сервере он должен идентифицировать себя. После идентификации на сервере клиент может использовать команды IMAP для управления сообщениями на сервере. Протоколом IMAP предусмотрена возможность поддержки пользователем нескольких почтовых ящиков на одном сервере. При этом клиент может читать, отправлять и удалять сообщения в любом из принадлежащих ему почтовых ящиков.

Методы проверки подлинности пользователя в IMAP

Так же как и в протоколе POP3, в IMAP имеется несколько методов проверки подлинности клиента. Некоторые из них обеспечивают больший уровень безопасности, по сравнению с другими. В отличие от клиентов POP3, клиенты IMAP часто проводят довольно длительные сеансы с сервером при обработке сообщений. Таким образом, идентификатор пользователя и пароль не передаются по сети несколько раз в час, как это обычно происходит при работе по протоколу POP3.

Команда LOGIN

Команда LOGIN позволяет клиенту при регистрации на сервере IMAP использовать идентификатор пользователя и пароль в обычном текстовом виде.

Команда AUTHENTICATE

С помощью команды AUTHENTICATE клиент может использовать при регистрации на сервере IMAP альтернативные методы проверки подлинности. Индивидуальная проверка подлинности пользователей не является обязательной и поддерживается не всеми серверами IMAP. К тому же реализации такой проверки могут различаться в зависимости от сервера. Когда клиент выдает команду AUTHENTICATE, сервер отвечает на нее строкой вызова в кодировке base64. Далее в обязанности клиента входит ответ на вызов сервера о проверке подлинности, также закодированный base64. Если на сервере не поддерживается метод проверки подлинности, предложенный клиентом, он включает в свой ответ отрицательное слово NO. После этого клиент должен продолжить переговоры по согласованию метода проверки подлинности. Если все попытки определить метод проверки подлинности потерпели неудачу, то клиент предпринимает попытку зарегистрироваться на сервере посредством команды LOGIN. Пример сеанса с применением AUTHENTICATE:

В строках 6–9 показаны попытки клиента согласовать с сервером IMAP метод проверки подлинности. Как видите, все они не увенчались успехом. А в строке 10 показано, что метод проверки, приемлемый и для клиента, и для сервера, найден. Отвечая, сервер в строке 11 выдает кодированную строку с вызовом в кодировке base64. Однако в строке 12 клиент отвергает попытку регистрации и возобновляет ее лишь в строке 14 с помощью команды LOGIN.

Клиентская часть протокола IMAP

После регистрации на сервере IMAP клиент может приступить к манипулированию сообщениями. Протокол IMAP предлагает довольном много команд для чтения, перемещения и удаления почтовых сообщений в почтовых ящиках на сервере. Помните, что протокол IMAP предполагает хранение всех сообщений на сервере. Загрузка почтовых сообщений на локальный компьютер производится лишь для отображения. При этом они не перемещаются и не копируются на локальный ПК клиента.

Почтовый ящик для клиента по умолчанию носит название INBOX. Все новые сообщения ложатся именно в INBOX. Клиент имеет возможность создавать новые почтовые ящики (иногда называемые в программах-клиентах для работы с электронной почтой папками). Туда с целью упорядочения он может перемещать сообщения из папки INBOX.

Каждому сообщению назначается уникальный идентификатор (UID), по которому они идентифицируются в почтовом ящике. Метка UID сохраняется в течение всех сеансов IMAP для того, чтобы клиентское программное обеспечение могло правильно идентифицировать сообщения в почтовом ящике. Каждому почтовому ящику соответствует уникальный идентификатор достоверности (UIDVALIDITY). Метка UIDVALIDITY должна присутствовать во время всех сеансов IMAP, только в том случае, если идентификаторы сообщений в ящике оставались неизменными. Если в почтовом ящике имеются сообщения с различными идентификаторами, то значение UIDVALIDITY при следующем сеансе должно увеличиться. Это позволяет клиентам быстро определять, появились ли в почтовом ящике новые сообщения с момента последнего к нему обращения.

Каждое сообщение снабжается флагом, который отображает его статус. Флаг может быть постоянным или задаваться на время сеанса. Постоянные флаги могут изменяться клиентом и сохраняться вне зависимости от сеансов. Флаги, назначаемые на время сеанса, действительны только на время текущего сеанса IMAP. В табл. 7.1 представлены варианты флагов почтовых сообщений.

Флаги почтового сообщения IMAP

Почтовому сообщению может соответствовать 0 флагов или несколько флагов. Информация о флагах передается клиенту вместе с самим сообщением. В обязанности клиента входит интерпретация флагов соответствующим образом.

В следующем разделе описываются команды IMAP, которые клиент может задавать серверу.

Сервер должен отвечать соответствующим образом на заданные команды или отвечать отрицательно, если команда задана неправильно либо не поддерживается.

Команда SELECT

Команда SELECT используется, лишь когда почтовый ящик активен. По умолчанию, пока клиент не зарегистрирован в системе, ни один из принадлежащих ему почтовых ящиков не является выбранным. Далее клиент должен выбрать почтовый ящик, с которым он собирается работать. Обычно первый ящик, который выбирается клиентом, — это ящик INBOX, куда помещаются новые сообщения. Формат команды SELECT следующий:

Здесь mailbox — это название почтового ящика, к которому обращается клиент. Во время одного сеанса IMAP может быть активен только один почтовый ящик. Если ящик существует и у клиента имеется соответствующий доступ к нему, то сервер дает многострочный ответ, где описывается состояние почтового ящика.

Команда CREATE

Команда CREATE используется для создания нового почтового ящика на сервере IMAP. Имя и местоположение новых почтовых ящиков определяются в соответствии с общими спецификациями ОС Linux. В рабочем каталоге пользователя создается новый почтовый ящик с именем, но без задания местоположения, так как оно известно каталогу $HOME клиента. Например, если рабочий каталог клиента находится в /home/riley и клиент задает команду CREATE для создания нового почтового ящика stuff/junk, то вновь созданный ящик на почтовом сервере под управлением ОС Linux будет иметь путь /home/riley/stuff/junk. В этом примере вы видите, как используется знак разделителя /. Однако это не является общим для всех серверов IMAP.

Команда DELETE

Команда DELETE применяется к почтовым ящикам, а не к сообщениям. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. В аргументе команды можно использовать стандартное описание путей ОС Linux, со знаком разделителя /, если только они не находятся в каталоге $HOME. Сообщения из удаленных почтовых ящиков восстановлению не подлежат и теряются вместе с ящиками.

Команда RENAME

С помощью команды RENAME клиент может изменить имя почтового ящика. При этом возможно применение двух параметров. Первый параметр — собственно имя почтового ящика, который требуется переименовать. И второй параметр — новое имя почтового ящика.

Команда LIST

Команда LIST используется для получения списка всех почтовых ящиков клиента. С ней используются два параметра. Формат команды LIST приведен ниже:

Здесь reference — каталог, где находятся почтовые ящики. Если задается пустая строка вместо этого параметра («»), то почтовые ящики находятся в рабочем каталоге пользователя $HOME. Второй параметр mailbox является именем почтового ящика, который нужно просмотреть. Здесь допускается использование специальных символов, так же, как и при получении обычного списка каталогов, например группового символа (*). Если именем почтового ящика задана пустая строка («»), то сервер будет возвращать в качестве ответа иерархический разделитель (для Linux /) и имя корневого параметра.

Команда LSUB

Команда LSUB используется для устранения проблемы, которая описана для команды LIST. В отличие от команды LIST, с помощью которой отображается все содержимое рабочего каталога пользователя, с помощью команды LSUB отображаются лишь активизированные ранее описанной командой SUBSCRIBE почтовые ящики клиента. Параметры команды LSUB точно такие же, что и для команды LIST, т.е. ссылка (reference) и имя почтового ящика. Подобно команде LIST, параметр ссылки указывает путь к каталогу, в котором находятся почтовые ящики с соответствующими именами (каталог $HOME, если указано «»). Соответственно, под именем почтового ящика понимается имя ящика или имена ящиков, которые требуется вывести в списке (допускается групповой символ (*).

Почтовые ящики могут затем добавляться в список активных ящиков с помощью команды SUBSCRIBE, а удаляться из списка с помощью команды UNSUBSCRIBE. С помощью этих команд можно реализовать на базе клиента IMAP чтение групп новостей. При этом каждая группа новостей реализована как отдельный почтовый ящик на сервере, на которую затем можно подписаться. Сегодня большинство программ для работы с электронной почтой включают функцию чтения групп новостей, так что выполнение этих операций в IMAP не требуется.

Команда APPEND

APPEND — еще одна команда из семейства команд IMAP. Как правило, протокол IMAP применяется исключительно для чтения сообщений из почтовых ящиков. С помощью команды APPEND появляется возможность посылать сообщения в почтовый ящик, добавляя сообщение к концу файла почтового ящика. Эта функция работает не совсем корректно и она является довольно опасной, поэтому не рекомендуем увлекаться ею в качестве альтернативы SMTP. Это, скорее, приятное излишество протокола IMAP, а не рабочая лошадка. Основной формат команды APPEND следующий:

Команда CHECK

Команда CHECK используется для установки контрольной точки в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его жесткий диск, должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда CHECK. Эта команда используется без параметров.

Команда CLOSE

Команда CLOSE полностью соответствует своему названию — она закрывает почтовый ящик.

Действие команды CLOSE четко прослеживается на только что открытом новом почтовом ящике. Открытый почтовый ящик закрывается также с помощью команды LOGOUT. Команда CLOSE не имеет параметров.

Команда EXPUNGE

Ответ сервера на команду EXPUNGE представляет собой отчет о новом состоянии почтового ящика.

В строке 8 пользователь alex выбирает почтовый ящик с именем newbox. Строки 9–16 представляют собой ответ сервера с информацией относительно выбранного почтового ящика. Строка 9 говорит о том, что в нем находится 6 сообщений. В строках 17 и 20 пользователь alex воспользовался командой STORE, чтобы пометить два сообщения как удаленные (\DELETED). Затем в строке 23 пользователь alex выдает команду STATUS. Из строки 24 можно сделать заключение, что, с точки зрения сервера IMAP, в почтовом ящике все еще находятся шесть сообщений, хотя два из них помечены как удаленные. В строке 26 пользователь выдает команду EXPUNGE, по которой сообщения, помеченные как удаленные, стираются. Ответ сервера в строках 27–31 подтверждает, что сообщения были удалены из ящика и в нем осталось четыре сообщения. Это же подтверждает и команда STATUS, заданная в строке 32. На нее сервер отвечает, что в почтовом ящике теперь только четыре сообщения.

Команда SEARCH является одним из наиболее мощных средств из арсенала IMAP. С помощью этой команды производится поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения. Формат команды SEARCH следующий:

Здесь CHARSET specification состоит из служебного слова CHARSET, за которым следует обозначение набора символов. Набор символов по умолчанию — ASCII , так что, как правило, этот параметр опускается. Параметр search criteria определяет ключевые критерии поиска и их значения. Критерии поиска описаны в табл. 7.3.

Таблица. Критерии поиска для команды SEARCH

Как видно из таблицы существует огромное количество критериев поиска сообщений. Это очень удобно, когда требуется найти специфическое сообщение в почтовых ящиках, которые заполнены большим количеством сообщений. Ниже представлен короткий пример с использованием команды SEARCH.

В строках 17, 20 и 23 показаны примеры использования команды SEARCH. Строки 18, 21 и 24 являются ответами сервера IMAP на команду SEARCH. В ответе содержатся номера сообщений, которые соответствуют критерию поиска. Если соответствий не найдено, то сервер возвращает слово SEARCH без идентификатора сообщения UID.

Команда FETCH

Команда FETCH используется для получения текста почтового сообщения. Она применяется только для отображения сообщений. В отличие от POP3, клиент IMAP не сохраняет копию сообщения на клиентском ПК.

Команда STORE

Команда STORE применяется для изменения информации о сообщении. Формат команды следующий:

Аргумент задает диапазон номеров сообщений, к которым применяется команда STORE. В настоящее время для этой команды определено только два типа данных ( ). Тип FLAGS определяет набор флагов, установленных для сообщения. Тип FLAGS.SILENT также определяет набор флагов, установленных для сообщения, но при этом сервер IMAP не возвращает их новое значение в своем ответе.

Поведением этих типов данных можно управлять, задав перед ними знак плюс (+) или минус (-). Знак плюс означает, что значение типа данных ( ) будет добавлено к сообщению, минус — что оно будет удалено из сообщения.

В строке 18 этого листинга показано, как устанавливается флаг \DELETED для сообщения в активном почтовом ящике с номером 1. Обратите внимание, что перед флагом задан знак плюс (+). Можно было бы также задать флаг (-). Тогда флаг \DELETED был бы отменен для сообщения (один из способов восстановить удаленное сообщение до того, как вступят в силу контрольные точки сообщения).

Команда COPY

Команда COPY используется для копирования сообщений из одного почтового ящика в другой. Формат команды COPY приведен ниже:

Здесь задает диапазон номеров сообщений, которые нужно скопировать из активного почтового ящика, а указывает имя ящика, в который их нужно скопировать.

Для протокола IMAP не определена команда перемещения сообщений, но очевидно, что эта операция есть не что иное, как копирование сообщений в другой почтовый ящик с заданием для оригиналов сообщений флага \DELETED. После следующей ротации почтового ящика (расстановки контрольных точек) оригиналы сообщений будут удалены, и останутся только их копии.

Команда CAPABILITY

С помощью команды CAPABILITY клиент может запрашивать у сервера IMAP информацию о его возможностях.

Команда NOOP

Действия команды NOOP, как мы знаем, соответствует ее названию, т.е. она ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду NOOP всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то NOOP вполне можно использовать как триггер для периодического запроса о состоянии сервера. Если что-то произошло с почтовым ящиком во время периода ожидания, например сервер удалил сообщения согласно правилам, установленным для почтового ящика администратором почтовой системы, то в ответ на команду NOOP будет возвращена обновленная информация о его состоянии.

Команда LOGOUT

Команда LOGOUT используется для завершения сеанса для текущего идентификатора пользователя и закрытия всех открытых почтовых ящиков. Если какие-либо сообщения были помечены флагом \DELETED, то с помощью этой команды они будут физически удалены из почтового ящика.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL