Что такое код imap_popen

Содержание

imap_open

Описание

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

A mailbox name consists of a server and a mailbox path on this server. The special name INBOX stands for the current users personal mailbox. Mailbox names that contain international characters bes >imap_utf7_encode() .

The server part, which is enclosed in ‘<' and '>‘, consists of the servers name or ip address, an optional port (prefixed by ‘:’), and an optional protocol specification (prefixed by ‘/’).

The server part is mandatory in all mailbox parameters.

All names which start with <are remote names, and are in the form «<" remote_system_name [":" port] [flags] ">» [mailbox_name] where:

  • remote_system_name — Internet domain name or bracketed IP address of server.
  • port — optional TCP port number, default is the default port for that service
  • flags — optional flags, see following table.
  • mailbox_name — remote mailbox name, default is INBOX

Optional flags for names

Flag Description
/service= service mailbox access service, default is «imap»
/user= user remote user name for login on the server
/authuser= user remote authentication user; if specified this is the user name whose password is used (e.g. administrator)
/anonymous remote access as anonymous user
/debug record protocol telemetry in application’s debug log
/secure do not transmit a plaintext password over the network
/imap, /imap2, /imap2bis, /imap4, /imap4rev1 equivalent to /service=imap
/pop3 equivalent to /service=pop3
/nntp equivalent to /service=nntp
/norsh do not use rsh or ssh to establish a preauthenticated IMAP session
/ssl use the Secure Socket Layer to encrypt the session
/validate-cert validate certificates from TLS/SSL server (this is the default behavior)
/novalidate-cert do not validate certificates from TLS/SSL server, needed if server uses self-signed certificates
/tls force use of start-TLS to encrypt the session, and reject connection to servers that do not support it
/notls do not do start-TLS to encrypt the session, even with servers that support it
/readonly request read-only mailbox open (IMAP only; ignored on NNTP, and an error with SMTP and POP3)

The password associated with the username

The options are a bit mask with one or more of the following:

  • OP_READONLY — Open mailbox read-only
  • OP_ANONYMOUS — Don’t use or update a .newsrc for news (NNTP only)
  • OP_HALFOPEN — For IMAP and NNTP names, open a connection but don’t open a mailbox.
  • CL_EXPUNGE — Expunge mailbox automatically upon mailbox close (see also imap_delete() and imap_expunge() )
  • OP_DEBUG — Debug protocol negotiations
  • OP_SHORTCACHE — Short (elt-only) caching
  • OP_SILENT — Don’t pass up events (internal use)
  • OP_PROTOTYPE — Return driver prototype
  • OP_SECURE — Don’t do non-secure authentication

Number of maximum connect attempts

Connection parameters, the following (string) keys maybe used to set one or more connection parameters:

  • DISABLE_AUTHENTICATOR — Disable authentication properties

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

Returns an IMAP stream on success or FALSE on error.

FPublisher

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

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

imap_open

imap_open — Open an IMAP stream to a mailbox

Описание

resource imap_open ( string $mailbox , string $username , string $password [, int $options [, int $n_retries ]] )

Opens an IMAP stream to a mailbox .

This function can also be used to open streams to POP3 and NNTP servers, but some functions and features are only available on IMAP servers.

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

A mailbox name consists of a server and a mailbox path on this server. The special name INBOX stands for the current users personal mailbox. Mailbox names that contain international characters besides those in the printable ASCII space have to be encoded width imap_utf7_encode().

The server part, which is enclosed in ‘<' and '>‘, consists of the servers name or ip address, an optional port (prefixed by ‘:’), and an optional protocol specification (prefixed by ‘/’).

The server part is mandatory in all mailbox parameters.

All names which start with <are remote names, and are in the form «<" remote_system_name [":" port] [flags] ">» [mailbox_name] where:

  • remote_system_name — Internet domain name or bracketed IP address of server.
  • port — optional TCP port number, default is the default port for that service
  • flags — optional flags, see following table.
  • mailbox_name — remote mailbox name, default is INBOX

Optional flags for names

Flag Description
/service= service mailbox access service, default is «imap»
/user= user remote user name for login on the server
/authuser= user remote authentication user; if specified this is the user name whose password is used (e.g. administrator)
/anonymous remote access as anonymous user
/debug record protocol telemetry in application’s debug log
/secure do not transmit a plaintext password over the network
/imap, /imap2, /imap2bis, /imap4, /imap4rev1 equivalent to /service=imap
/pop3 equivalent to /service=pop3
/nntp equivalent to /service=nntp
/norsh do not use rsh or ssh to establish a preauthenticated IMAP session
/ssl use the Secure Socket Layer to encrypt the session
/validate-cert validate certificates from TLS/SSL server (this is the default behavior)
/novalidate-cert do not validate certificates from TLS/SSL server, needed if server uses self-signed certificates
/tls force use of start-TLS to encrypt the session, and reject connection to servers that do not support it
/notls do not do start-TLS to encrypt the session, even with servers that support it
/readonly request read-only mailbox open (IMAP only; ignored on NNTP, and an error with SMTP and POP3)

The password associated with the username

The options are a bit mask with one or more of the following:

  • OP_READONLY — Open mailbox read-only
  • OP_ANONYMOUS — Don’t use or update a .newsrc for news (NNTP only)
  • OP_HALFOPEN — For IMAP and NNTP names, open a connection but don’t open a mailbox.
  • CL_EXPUNGE — Expunge mailbox automatically upon mailbox close (see also imap_delete() and imap_expunge())
  • OP_DEBUG — Debug protocol negotiations
  • OP_SHORTCACHE — Short (elt-only) caching
  • OP_SILENT — Don’t pass up events (internal use)
  • OP_PROTOTYPE — Return driver prototype
  • OP_SECURE — Don’t do non-secure authentication

Number of maximum connect attempts

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

Returns an IMAP stream on success or FALSE on error.

Что такое код imap_popen

(PHP 3, PHP 4, PHP 5)

imap_open — Open an IMAP stream to a mailbox

Description resource imap_open ( string mailbox, string username, string password [, int options] )

Returns an IMAP stream on success and FALSE on error. This function can also be used to open streams to POP3 and NNTP servers, but some functions and features are only available on IMAP servers.

A mailbox name consists of a server part and a mailbox path on this server. The special name INBOX stands for the current users personal mailbox. The server part, which is enclosed in ‘<' and '>‘, consists of the servers name or ip address, an optional port (prefixed by ‘:’), and an optional protocol specification (prefixed by ‘/’). The server part is mandatory in all mailbox parameters. Mailbox names that contain international characters bes >imap_utf7_encode() .

remote_system_name — Internet domain name or bracketed IP address of server.

port — optional TCP port number, default is the default port for that service

flags — optional flags, see following table.

mailbox_name — remote mailbox name, default is INBOX

Table 1. Optional flags for names

Flag Description
/service= service mailbox access service, default is «imap»
/user= user remote user name for login on the server
/authuser= user remote authentication user; if specified this is the user name whose password is used (e.g. administrator)
/anonymous remote access as anonymous user
/debug record protocol telemetry in application’s debug log
/secure do not transmit a plaintext password over the network
/imap , /imap2 , /imap2bis , /imap4 , /imap4rev1 equivalent to /service=imap
/pop3 equivalent to /service=pop3
/nntp equivalent to /service=nntp
/norsh do not use rsh or ssh to establish a preauthenticated IMAP session
/ssl use the Secure Socket Layer to encrypt the session
/validate-cert validate certificates from TLS/SSL server (this is the default behavior)
/novalidate-cert do not validate certificates from TLS/SSL server, needed if server uses self-signed certificates
/tls force use of start-TLS to encrypt the session, and reject connection to servers that do not support it
/notls do not do start-TLS to encrypt the session, even with servers that support it
/readonly request read-only mailbox open (IMAP only; ignored on NNTP, and an error with SMTP and POP3)

The options are a bit mask with one or more of the following:

OP_READONLY — Open mailbox read-only

OP_ANONYMOUS — Don’t use or update a .newsrc for news (NNTP only)

OP_HALFOPEN — For IMAP and NNTP names, open a connection but don’t open a mailbox.

CL_EXPUNGE — Expunge mailbox automatically upon mailbox close (see also imap_delete() and imap_expunge() )

OP_DEBUG — Debug protocol negotiations

OP_SHORTCACHE — Short (elt-only) caching

OP_SILENT — Don’t pass up events (internal use)

OP_PROTOTYPE — Return driver prototype

OP_EXPUNGE — Silently expunge recycle stream

OP_SECURE — Don’t do non-secure authentication

Что такое POP3, IMAP и SMTP-серверы?

POP3
Это протокол, который можно использовать для приема электронной почты. Т.е. имеется в виду, возможность забирать почту с сервера на котором она хранится, с помощью интернета (TCP\IP соединение).

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

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

SMTP
Это протокол, который предназначен исключительно для отправки почты (POP3 и IMAP — это получение).

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

SMTP-сервер — например smtp.mysite.com
POP3-сервер — например mail.mysite.com
Имя пользователя — например boss@mysite.com
Пароль — он и в Африке пароль.

Еще раз напомним, имя пользователя и пароль задаются Вами, при создании почтового ящика. POP3 и SMTP серверы можно узнать у хостинг-провайдера, или же посмотреть в письме с настройками, которое приходит после заказа хостинга.

Я хочу получать почту через программу
Наиболее популярные программы для работы с почтой это: Mozilla Thunderbird (бесплатная), Microsoft Outlook (не очень удобная), The Bat (удобная, но платная). Также читайте как настроить получение почты на Mac OS.

Важно!
Иногда возникают проблемы с отправкой почты связанные с тем, что Ваш интернет-провайдер блокирует отправку почты, через любой smtp-сервер, кроме его собственного. В таком случае узнайте его на сайте интернет-провайдера или же в технической поддержке.

Также бывает, что интернет-провайдер разрешает использовать чужие smtp-серверы для отправки почты, но блокирует порт 25 из соображений безопасности. В таком случае Вы должны либо использовать порт 587, либо обратиться в техническую поддержку интернет-провайдера, чтобы они разблокировали порт.

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: по команде удаления письма не перемещаются в корзину, а помечаются как перечеркнутые, и затем удаляются позже. Выяснилось, что для пользователей это выглядит, как баг — многие просто не понимают, что делать дальше и как добиться того, чтобы клиент вел себя привычным образом и письма оказались в корзине.

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

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

POP3 и IMAP: история почтовых протоколов и сбор писем по IMAP в Яндекс.Почте

(посвящается Марку Криспину 19.07.1956 — 28.12.2012)

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

Начнём наш экскурс в историю протоколов, через которые вы каждый день получаете свою сотню писем.

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

Иногда встаёт задача перейти на новую и более удобную почтовую систему, но мешают накопленные архивы писем. Бросить их на прежнем месте? Жалко. Пароли забываются. Бывает, утрачиваются номера мобильных и email-адреса, введённые для их восстановления. Однажды можно потерять архивы навсегда. Скачать на локальный жесткий диск? Переписать на болванку или флешку? Но они ненадёжны: ломаются, теряются, портятся.

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

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

POP3 ведёт свою историю с 1984 года, когда одна из сотрудниц Института Информатики в составе Университета Южной Калифорнии, Джойс Рейнольдс, опубликовала RFC 918 — предложение стандартного протокола для получения электронной почты (POP — Post Office Protocol). Через 4 года появилась третья редакция протокола POP, а текущая, современная версия стандарта на POP3 опубликована весной 1996 года, почти 17 лет назад.

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

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

Интересно, что в протоколе POP2 была предусмотрена возможность работы с несколькими папками на сервере, но она оказалась невостребована, да и сам протокол распространения не получил. Поэтому в POP3 команду FOLD, которая реализовала эту возможность, убрали. POP2 обогнал время.

Сейчас в POP3 нет возможности скачивать с сервера структуру папок, только «плоский» список писем, состоящий, как правило, либо из входящих писем, либо из объединения пользовательских папок. Невозможно учитывать флажки прочтённости и важности. Несмотря на эти ограничения, протокол всё ещё широко используется, в основном из-за своей простоты и очень широкой поддержки в любых устройствах.

Было много попыток улучшить POP3, но ни одна из них не достигла такого успеха, как протокол IMAP, почти параллельно разивавшийся с 1985 года. История IMAP тоже весьма интересна. Например, первая реализация была сделана на Lisp-е, и его наследие навсегда осталось в протоколе в виде S-выражений, которыми кодируются сложные ответы сервера, такие как BODYSTRUCTURE.

Автор и идеолог IMAP Марк Криспин заложил в него принцип постоянного хранения писем на почтовом сервере. IMAP оказался одним из ранних «облачных» протоколов Интернета, рассчитанных на то, что локальное хранилище на персональном компьютере ненадёжно. Кроме того, персональных компьютеров и других терминалов для работы с почтой у человека может быть несколько — базовые вещи для нас теперешних.

Последняя версия IMAP — 4rev1 — описана в документе RFC 3501, увидевшем свет в 2003 году. Несмотря на кажущийся возраст, протокол получился живым благодаря предусмотренному на ранних этапах механизму расширений. Этот механизм, конечно, тоже не без недостатков, но тем не менее, он позволил различным людям выпустить более пятидесяти публичных расширений, многие из которых были разработаны совсем недавно и нашли широкое применение.

Современная почтовая система без поддержки доступа по IMAP — нонсенс. На протяжении нескольких лет Яндекс.Почта поддерживает IMAP в качестве сервера для работы из таких популярных клиентских программ, как Outlook, Thunderbird, Apple Mail, а также многочисленных мобильных клиентов. Кстати, именно благодаря смартфонам IMAP получил вторую волну развития. Если на персональных компьютерах уже довольно давно подавляющее большинство пользователей сделали выбор в пользу веб-интерфейса к своей почте, то с мобильными устройствами ситуация совсем не такая. Быстрые и красивые IMAP-клиенты, например в iOS, заставляют пересматривать подход к IMAP как к выбору исключительно профессиональных и «продвинутых» пользователей.

Недавно в Яндекс.Почте появилась и функция IMAP-клиента — сборщика почты с внешних серверов по IMAP — в дополнение к POP3-сборщику.

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

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

По-прежнему кроме самих писем импортируются контакты из адресных книг самых распространённых почтовых сервисов.

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

Каждая команда должна быть предварена некоторым идентификатором — тегом, который затем будет использован сервером при генерации ответа на эту команду. Это позволяет «беседе» клиента с сервером быть абсолютно асинхронной — сервер вправе отвечать на команды клиента в любом порядке, так как теги позволяют однозначно сопоставить ответ ранее поданной команде. Более того, сервер может выполнять такие команды одновременно, ускоряя скорость работы с почтой, и Яндекс.Почта умеет это использовать. Одновременно это требует особого подхода к программированию как клиента, так и сервера. Если вам в этом месте вспомнился механизм sequence numbers в TCP, то запишите себе +1 в geek cred :)

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

Переходите на Яндекс.Почту, настраивайте сборщик по IMAP — и вы всегда сможете найти любое старое письмо. Уж что-что, а искать Яндекс умеет.

ИТ База знаний

ShareIT — поделись знаниями!

Полезно

Узнать IP — адрес компьютера в интернете

Онлайн генератор устойчивых паролей

Онлайн калькулятор подсетей

Калькулятор инсталляции IP — АТС Asterisk

Руководство администратора FreePBX на русском языке

Руководство администратора Cisco UCM/CME на русском языке

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Похожие статьи

Настройка и использование Docker Compose

Как пользоваться vim в Linux

Установка и настройка ClamAV Linux

Google – советы по поиску информации

Самое интересное про SMTP, POP3 и IMAP

3 минуты чтения

Сегодня мы подробно расскажем про наиболее используемые в сети интернет протоколы – POP3, IMAP и SMTP. Каждый из указанных протоколов имеет определенное назначение и функциональные возможности. Давайте попробуем разобраться.

Протокол POP3 и его порты

Post Office Protocol 3 (POP3) это стандартный протокол почты созданные для получения электронных писем с удаленного сервера на e-mail клиент.POP3 позволяет вам сохранить почтовое сообщение на ваш компьютер и даже прочесть его, в случае, если вы находитесь не в сети. Важно отметить, что если вы решили использовать POP3 для подключения к учетной записи почты, письма, которые уже скачаны на компьютер, будут удалены с почтового сервера. Как пример, если вы используете несколько компьютеров для подключения к одному почтовому аккаунту, то протокол POP3 может быть не лучшим выбором в данной ситуации. С другой стороны, так как почта хранится локально, на ПК конкретного пользователя, это позволяет оптимизировать дисковое пространство на стороне почтового сервера.

По умолчанию, протокол POP3 использует следующие порты:

  • Порт 110 – это порт протокола POP3 по умолчанию. Не является безопасным.
  • Порт 995 – этот порт следует использовать в том случае, если вы хотите установить безопасное соединение.

Протокол IMAP и порты

Internet Message Access Protocol (IMAP) – это почтовый протокол, созданный для доступа к почте с локального почтового клиента. IMAP и POP3 – наиболее популярные в сети интернет протоколы, используемые для получения e-mail. Оба этих протокола поддерживается всеми современными почтовыми клиентами (MUA — Mail User Agent) и WEB – серверами.

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

По умолчанию, протокол IMAP использует следующие порты:

  • Порт 143 – порт по умолчанию. Не безопасен.
  • Порт 993 – порт для безопасного соединения.
Протокол SMTP и его порты

Simple Mail Transfer Protocol (SMTP) – это стандартный протокол для отправки почтовых сообщений по сети интернет.

Данный протокол описан в RFC 821 и RFC 822, впервые опубликованных в августе 1982 года. В рамках данных RFC, формат адреса должен быть в формате имя_пользователя@доменное_имя. Доставка почты, аналогична работе обычной почтовой службы: например, письмо на адрес ivan_ivanov@merionet.ru, будет интерпретирован так: ivan_ivanov – адрес, а merionet.ru – почтовый индекс. Если доменное имя получателя отличается от доменного имени отправителя, то MSA (Mail Submission Agent) отправит письмо через Mail Transfer Agent (MTA). Главная идея MTA в том, чтобы перенаправлять письма в другую доменную зону, по аналогии, как традиционная почты отправляет письма в другой город или область. MTA так же получает почту от других MTA.

Протокол SMTP использует следующие порты:

  • Порт 25 – порт SMTP по умолчанию. Не безопасен.
  • Порт 2525 – данный порт используется в том случае, если интернет провайдер фильтрует порт 25.
  • Порт 465 – порт для безопасного соединения.
  • SMTP
  • POP3
  • 4664
  • 28

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

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

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

Что такое код imap_popen

У меня есть: Google Cloud Engine (Google не позволяет отправлять почту) Домен (GoDaddy) Внешний VServer с Plesk. Я хочу использовать…

Я использую ImapX и C# для подключения к моей учетной записи Gmail. Существует два фрагмента кода: var folder = client.Folders[«INBOX»]…

Может быть, у меня просто сегодня плохой мозг, но я вдруг не могу понять, как читать электронную почту с библиотекой…

В настоящее время я работаю над веб-приложением, которое по сути является CRM. Клиент хочет иметь возможность выполнять все свои повседневные…

Я ищу способ загрузить все необработанные данные электронной почты (включая вложения), подобные тому, что вы получаете, нажав «показать оригинал» в…

Недавно возникла проблема с отправкой почты с сервера. При исследовании в нем была ошибка ошибки сегментации(11). Я был направлен на…

У меня есть требование для клиента переместить большой набор почтовых ящиков IMAP с одного сервера на другой. Вы могли бы…

Я только что перенес свое приложение на облачный хостинг. I was using imap_open to access mail in my gmail account….

Я пишу клиентское приложение, которое получает сообщения электронной почты с сервера IMAP, а затем сохраняет их в базе данных. Проблема…

Я использую функции IMAP PHP «fetchstructure» или «imap_body» в зависимости от типа сообщения, чтобы получить тело сообщения от учетной записи…

Хорошо, так что у меня есть рабочая программа, это только очень основное доказательство типа концепции вещи — нет времени налил…

У меня есть две кнопки в моем макете говорят b1 и b2. Нажав B1, я хочу заполнить список с помощью…

Я использую приложения google для своей электронной почты. Настроил его так: Incoming Mail (IMAP) Server — requires SSL: imap.gmail.com Use…

Как получить вложенный файл из этого письма? Это письмо отправляется с компьютера apple, и электронная почта struture не похож на…

Предварительная информация: CakePHP 2.икс Ubuntu используя XAMPP на localhost Как часть веб-приложения, я сделал сценарий, который проверяет почтовый ящик для…

Мне интересно, могу ли я каким-то образом сделать «stat» переменной в следующей функции: def stats(stat) self.items.sum(:stat) + self.stat end Мне…

Я хочу получать электронные письма в android с помощью javamail. но я столкнулся с некоторыми проблемами. в POP3, если я…

Я работаю над приложением iOS, через которое пользователь может читать и отправлять сообщения из своей учетной записи электронной почты. Мой…

Если я проверяю свою электронную почту от моего дома утром, и в течение дня я путешествую, и к концу дня…

Когда я пытаюсь получить тему и содержание электронной почты, я alwasy получил это содержание было кодировать, пример: тема: Th _unk_…

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

Есть ли решение, в котором я могу хранить свои письма IMAP, чтобы я мог передать сообщения imap в учетную запись…

Я установил roundcube mail на своем веб-сервере на облачных сайтах rackaspace. Он работал оштрафован до сегодняшнего утра он просто начал…

В настоящее время я рассматриваю копирование общих папок и содержащих сообщения электронной почты из MS exchange server 2003 в локальный…

Для моего проекта мне нужно читать письма, используя POP Я использую расширение IMAP для PHP. Мне не нужно получать все…

Я используюimap_search, чтобы получить список писем от INBOXи.SENT ITEMS У меня есть сетка ,которая показывает заголовки Почты сначала,когда пользователь нажимает…

Я использую Django для разработки, извлекая из базы данных текст, содержащий символ новой строки. Однако при визуализации шаблона с помощью…

О PHP IMAP, Кто-нибудь может мне помочь? Я хочу переместить электронную почту из папки «Входящие» в другой удаленный почтовый ящик….

Пожалуйста, извините меня, если этот вопрос был задан напрямую. Я ищу самый простой и надежный способ получения почты с нашего…

Я использую довольно простой класс php emailtodb для импорта писем в базу данных mysql. Все работает отлично, как я надеялся,…

Я использую javamailдля чтения почтового ящика. Теперь мне нужно опросить почтовый ящик и проверить все новые письма, полученные, отправленные, черновики…

У меня есть очень простой код, который пытается открыть сокет с помощью JavaMail на Android, как это: public boolean connect()…

Я использую Koolwired.Imap для получения вложений. Ниже приведен код, который я написал. используя K = Koolwired.протокол IMAP; public void GetAttachmentsTest(string…

На сервере exchange установлен почтовый ящик с несколькими псевдонимами. Затем PHP-скрипт выполняет петлю, смотрит, на какой псевдоним было отправлено письмо,и…

Я пытаюсь подключиться к серверу exchange с IMAP на порту 443 (он был настроен таким образом на другом конце), используя…

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

Я использую следующий код, который вы можете узнать из php.net чтобы удалить все письма в папке «Входящие»: function deleteEmails($emailAddress) <…

Я играл с этим и не могу заставить его вытащить правильную часть сообщения, которое будет введено в базу данных. I…

Я использую почту Mikel https://github.com/mikel/mail ruby gem для чтения с сервера IMAP. Это все работает отлично, однако мне было интересно,…

У меня есть резюме email parser в моем приложении. Пользователь просто отправит резюме по электронной почте, и моя система проанализирует…

Я хочу отправить команды IMAP через терминал Mac OS X на сервер и получить ответ. Я могу подключиться к серверу…

Я хотел бы знать, есть ли служба, которая может дать мне настройки imap для данного адреса электронной почты. Почтовые клиенты…

Я могу получать электронные письма из одного почтового ящика с PHP и хранить их в базе данных. Хотя я хочу…

Im пытается использовать JavaMail для подключения к gmail с помощью IMAP Вот фрагмент кода того, что Im делает public class…

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

У меня есть проблемы с созданием TLS-trust-store для подключения к учетной записи gmail через IMAP в Mule ESB Если я…

Теперь я хотел бы проверить, дублируется ли входящая электронная почта через IMAP с помощью javamail, что может означать, что одно…

Я пытаюсь получить OTP-письмо из учетной записи imap (тестирование с помощью gmail), а учетная запись gmail-это новая «тестовая» учетная запись…

Я пытаюсь подключиться к серверу Exchange своей компании с помощью приложения, которое я написал. Я искал 2 дня подряд, и…

Я пытаюсь подключиться к почтовому серверу ISP с помощью протокола IMAP на java. Мое требование-клиент предоставляет почтовые адреса, имя пользователя…

Может кто-то пожалуйста снабдить разрешение проблема внутри Как подключиться к почтовому серверу с помощью JavaMail Я застрял в одной точке.

Я хочу, чтобы получить просто по электронной почте текстовое тело от Gmail(IMAP серверов в целом) без необходимости загружать все сообщение….

Мы используем Thunderbird в качестве нашего почтового клиента в офисе и используем IMAP (через Google Apps). Но это занимает некоторое…

Я стараюсь принимать непрочитанные письма от gmail. Есть много примеров кода, и я использовал их. Проблема в том, что код…

Я собираю письма от моего mailserver с imap_mail (php), взрываю результат и сохраняю его в базу данных после использования mysql_real_escape_string….

Я получаю доступ к Gmail Imap на Appengine с помощью XOAUTH2. Подключение к imap и поиск сообщения работает просто отлично,…

Существует ли публичная база общих настроек электронной почты для разных доменов для электронной почты? Получение Yahoo!, Gmail и другие довольно…

Я хочу, чтобы почтовые сообщения сортировались по дате и подкачке.Я использую javamail imap.У него есть api, чтобы сделать такой вид…

Я хочу получить почтовое изображение встраивания в javamail imap .Как это сделать? Только образ сохранить как локальный (D:), а затем…

Есть ли способ, чтобы swift mail размещал сообщение в папке Черновика, а не просто отправлял. Похоже, проблема заключается в использовании…

Я разрабатываю клиент IMAP с JavaMail 1.4 (сервер MS Exchange 2010). Я заметил, что подтверждающие сообщения (чтение/не чтение) отправляются клиентам…

Мне нужно сохранить историю всего взаимодействия с электронной почтой, которая получает письма и отправленные письма. Я прочитал INBOX с помощью…

Джавамаил новичок здесь. Я пытаюсь понять, что не так с клиентом Javamail, который встроен в очень большую систему. Извините, у…

В настоящее время я пытаюсь получить невидимые/непрочитанные сообщения с моего сервера. В настоящее время у меня есть это: $openmail =…

Попытка использовать функцию PHP imap_open для подключения к моей учетной записи gmail, вот код: $mailboxpath = «INBOX»; $username = «email@gmail.com»;…

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

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

Я разрабатываю почтовый клиент (IMAP / SMTP)JavaMail. Этот клиент общается с сервером Exchange 2010, который автоматически отправляет уведомления о прочтении,…

Я работаю над системой, которая загружает электронные письма в базу данных, однако я хочу захватить только новые электронные письма из…

Я использую javax mail api для чтения сообщений на сервере imap. Я проверяю кодирование содержимого сообщений, потому что я декодирую…

Я пытаюсь подключиться к моей учетной записи gmail с помощью php, но скрипт висит на imap_open, оставляя мой браузер в…

Я использую этот код для загрузки вложений из gmail $savedir = __DIR__ . ‘/imap-dump/’; $inbox = new IMAPMailbox($hostname, $username, $password);…

Мой парсер электронной почты показывает смешные символы, хотя я использовал ‘quoted_printable_decode’. I also used ‘qprint’still showing funny characters. Конечная цель…

Я пытаюсь Javamail на android, чтобы читать письма через imap. вот мой код, но он не работает. это дает ошибку…

У меня есть код для поиска, хотя электронные письма и если определенная строка будет найдена, все будет сделано. Ниже мой…

Я успешно подключился к своей учетной записи hotmail, но когда я пытаюсь сделать какой-либо imap_search с опцией ‘FROM’, веб-страница работает…

У меня есть инструмент загрузки почтового клиента, используя php imap. Он работает для почты, которая имеет меньший адрес (To, cc..)….

Я получаю индекс вне диапазона исключения при компиляции моего представления сетки для отображения набора ордеров. Он возвращает не все строки…

То, что я пытаюсь сделать, это я аутентифицирую пользователя с моим google oauth и с помощью типа доступа в автономном…

У меня есть несколько строк php, которые читают электронную почту из почтового ящика gmail с помощью функций расширения imap. Мой…

Я развернул сервер Java на Jelactic PaaSплатформе. Проект хорошо работает на localhost, но там он дает com.sun.mail.util.MailConnectException…. Любые Решения Пожалуйста…….

Я делаю небольшой скрипт, который читает письма из моего почтового ящика и сохраняет их в базе данных mysql. У меня…

Я пытаюсь читать письма двух разных типов. Один вид электронной почты имеет тело html под номером детали 2, который я…

Уже прошел RFC 4469. Просто хотел узнать, как именно я могу использовать команду CATENATE. Я также сослался на пример, приведенный…

Я работаю над резервным копированием почты Google . Я застрял при получении другой языковой папки. Google возвращает некоторую закодированную строку…

Я заметил, что критерии «текст» или «тело» не работают на каждом почтовом сервере. Ex: UNDELETED TEXT «hello» Есть ли решение…

Я сталкиваюсь со странной проблемой, когда я пытаюсь загрузить электронные письма из GMAIL с помощью IMAPS. Я использую JAVAMAIL API….

Я пытаюсь получить письма gmail с IMAP (в objective-c), и я хочу отделить, для каждого потока, каждое сообщение, которое было…

Я пытаюсь получить информацию о почте, на которую ответила конкретная почта… Я использую функцию getInReplyTo () imap, но я не…

store.connect() не работает для gmail imap на прокси для моего ниже кода: Properties props = new Properties(); props.setProperty(«mail.store.protocol», «imaps»); Session…

Я написал скрипт python, чтобы проверять почту каждые 10 секунд. Его работа хорошо в моей системе. но есть ошибки в…

Я пытаюсь искать сообщения относительно email-id по всем доступным папкам IMAP без повторения каждой папки и поиска в ней. Существует…

Я не уверен, как отладить это, функция imap_msgno()возвращает 0 вместо номера сообщения без какой-либо ошибки. Это часть кода, дающая проблемы…

Я пишу сценарий, чтобы захватить ссылку из письма, которое мое веб-приложение отправляет, чтобы затем начать набор автоматических тестов. В тот…

Я пытаюсь настроить сервер IMAP, который извлекает данные из базы данных SQL. У меня нет проблем с сообщениями, но я…

Мне нужно прочитать содержимое почты в проекте ZF2. Я могу читать заголовок и contentType, но не «тело». ContentType = multipart…

Я хотел бы получить доступ к электронной почте Outlook пользователя с моим приложением javascript. Google делает это очень легко с…

Я хочу предоставить доступ к одной учетной записи gmail примерно 10 пользователям, но я хотел бы предоставить доступ только для…

АйТи бубен

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

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

Содержание

Команды 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, то с помощью этой команды они будут физически удалены из почтового ящика.

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

imap_open — открывает IMAP-поток в mailbox.

Описание

int imap_open (string mailbox, string username, string password [, int flags])

Возвращает IMAP-поток при успехе и FALSE при ошибке. Эта функция может использоваться также для открытия потоков к POP3 и NNTP серверам, но некоторые функции и их возможности доступны только на IMAP-серверах.

Имя mailbox’а состоит из серверной части и пути mailbox’а на этом сервере. Специальное имя INBOX предназначено для персонального mailbox’а текущего пользователя. Серверная часть, заключённая в ‘<' и '>‘, состоит из имени сервера или ip-адреса, необязательного номера порта (с префиксом ‘:’) и необязательной спецификации протокола (с префиксом ‘/’). Серверная часть является обязательной во всех параметрах mailbox’а. Имена почтовых ящиков, содержащие интернациональные символы за пределами печатаемых ASCII, должны быть кодированы с помощью imap_utf7_encode() .

Опции это битовая маска с одним или более значений:


OP_READONLY — открывть mailbox только для чтения

OP_ANONYMOUS — не использовать или не обновлять .newsrc на новый (только в NNTP)

OP_HALFOPEN — для имён IMAP и NNTP, открывает соединение, но не открывает mailbox

CL_EXPUNGE — очищает mailbox автоматически после его закрытия

Для соединения с IMAP-сервером, запущенным на порту 143 на локальной машине, сделайте так:

Для соединения с POP3-сервером на порту 110 а локальном сервере используйте:

Для соединения с SSL IMAP или POP3-сервером добавьте /ssl после спецификации протокола:

Для соединения с SSL IMAP или POP3-сервером с self-signed сертификатом добавьте
/ssl/novalidate-cert после спецификации протокола:

Для соединения с NNTP-сервером на порту 119 на локальном сервере используйте:

Для соединения с удалённым сервером замените «localhost» на имя или IP-адрес сервера, с которым вы хотите соединиться.

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