Что такое код imap_delete


Содержание

Что такое код imap_delete

imap_delete — помечает сообщение на удаление из текущего mailbox.

Описание

int imap_delete (int imap_stream, int msg_number [, int flags])

imap_delete() помечает на удаление сообщения, перечисленные в msg_number . Необязательный параметр flags имеет только одну опцию, FT_UID , которая говорит функции, что нужно рассматривать аргумент msg_number как UID . Сообщения, помеченные на удаление, будут оставаться в mailbox до тех пор, пока не будет вызвана imap_expunge() или imap_close() с опцией CL_EXPUNGE.

Примечание: POP3 mailbox’ы не сохраняют свои флаги в промежутке между соединениями, поэтому imap_expunge() обязана вызываться в ходе того же соединения, чтобы сообщения, помеченные на удаление, действительно были вычищены.

imap_delete

(PHP 4, PHP 5, PHP 7)

imap_delete — Пометить сообщение для удаления

Описание

Помечает сообщения, перечисленные в msg_number для удаления. Помеченные сообщения будут оставаться в ящике пока не будет вызвана функция imap_expunge() , либо imap_close() с установленным параметром CL_EXPUNGE .

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

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

Можно задать как FT_UID , тогда функция будет ожидать в параметре msg_number не номер сообщения, а UID.

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

Возвращает TRUE .

Примеры

Пример #1 Пример использования imap_delete()

= imap_open ( «INBOX» , «username» , «password» )
or die( «Can’t connect: » . imap_last_error ());

$check = imap_mailboxmsginfo ( $mbox );
echo «Messages before delete: » . $check -> Nmsgs . «
\n» ;

imap_delete ( $mbox , 1 );

$check = imap_mailboxmsginfo ( $mbox );
echo «Messages after delete: » . $check -> Nmsgs . «
\n» ;

$check = imap_mailboxmsginfo ( $mbox );
echo «Messages after expunge: » . $check -> Nmsgs . «
\n» ;

Примечания

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

Смотрите также

  • imap_undelete() — Снимает с сообщения метку удаления
  • imap_expunge() — Удалить все помеченные для удаления сообщения
  • imap_close() — Закрыть поток IMAP

imap_delete

imap_delete — помечает сообщение на удаление из текущего mailbox.

Описание

int imap_delete (int imap_stream, int msg_number [, int flags])

imap_delete() помечает на удаление сообщения, перечисленные в msg_number. Необязательный параметр flags имеет только одну опцию, FT_UID, которая говорит функции, что нужно рассматривать аргумент msg_number как UID. Сообщения, помеченные на удаление, будут оставаться в mailbox до тех пор, пока не будет вызвана imap_expunge() или imap_close() с опцией CL_EXPUNGE.

Примечание: POP3 mailbox’ы не сохраняют свои флаги в промежутке между соединениями, поэтому imap_expunge() обязана вызываться в ходе того же соединения, чтобы сообщения, помеченные на удаление, действительно были вычищены.

Протоколы электронной почты: POP3, IMAP4, SMTP

В этой статье рассмотрены наиболее часто используемые протоколы электронной почты в Интернете — POP3, IMAP и SMTP. Каждый из них имеет определенную функцию и способ работы. В содержании статьи разъясняется, какая конфигурация лучше всего подходит для конкретных потребностей пользователя при использовании e-mail-клиента. А также раскрывается ответ на вопрос о том, какой протокол поддерживает электронную почту e-mail.

Что такое POP3?

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

По умолчанию протокол POP3 работает на двух портах:

порт 110 — это незашифрованный порт POP3;

порт 995 — его нужно использовать, если вы хотите безопасно подключиться к POP3.

Что такое IMAP?

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

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

Протокол IMAP работает на двух портах:

порт 143 — это незашифрованный порт IMAP по умолчанию;

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

Что такое SMTP?

Протокол Simple Mail Transfer Protocol (SMTP) — это стандартный протокол для отправки электронной почты через Интернет.

SMTP работает в трех портах:

порт 25 — это незашифрованный порт SMTP по умолчанию;

порт 2525 — он открывается на всех серверах SiteGround, если порт 25 фильтруется (например, вашим интернет-провайдером), и вы хотите отправлять незашифрованные электронные письма с помощью SMTP;

порт 465 — он используется, если вы хотите безопасно отправлять сообщения с помощью SMTP.

По каким протоколам происходит обмен электронной почтой? Понятия и термины

Термин «сервер электронной почты» относится к двум серверам, необходимым для отправки и получения писем, то есть к SMTP и POP.

Сервер входящей почты — это сервер, связанный с вашей учетной записью адреса электронной почты. Для нее не может быть более одного входящего почтового сервера. Для доступа к входящим сообщениям необходим почтовый клиент — программа, которая может получать электронную почту из учетной записи, позволяя пользователю читать, пересылать, удалять и отвечать на сообщения. В зависимости от вашего сервера, вы можете использовать выделенный почтовый клиент (например, Outlook Express) или веб-браузер. Так, Internet Explorer применяют для доступа к учетным записям на основе электронной почты. Письма хранятся на сервере входящей почты до его загрузки. После того, как вы загрузили свою почту с почтового сервера, сделать повторно это будет нельзя. Чтобы успешно загрузить данные, необходимо ввести правильные настройки в электронной почтовой программе. Большинство входящих почтовых серверов используют один из следующих протоколов: IMAP, POP3, HTTP.

Исходящий почтовый сервер (SMTP)

Это сервер, используемый только для отправки писем (для переноса их из вашей почтовой клиентской программы в приемник). Большинство исходящих почтовых серверов используют SMTP-протокол (Simple Mail Transfer Protocol) для отправки корреспонденции. В зависимости от ваших сетевых параметров сервер исходящей почты может принадлежать вашему интернет-провайдеру или серверу, на котором вы настраиваете свою учетную запись. В качестве альтернативы вы можете использовать SMTP-сервер на основе подписки, который позволит вам отправлять электронные письма с любой учетной записи. Из-за проблем со спамом большинство исходящих почтовых серверов не позволяют отправлять электронные письма, если вы не вошли в свою сеть. Сервер с открытым ретранслятором позволит вам использовать его для отправки электронных писем, независимо от того, принадлежите ли вы к его сетевой группе или нет.

Порты электронной почты

Для сетей порт означает конечную точку логического соединения. Номер порта определяет его тип. Ниже перечислены порты электронной почты по умолчанию:

безопасный SMTP (SSMTP) — порт 465;

безопасный IMAP (IMAP4-SSL) — порт 585;

IMAP4 через SSL (IMAPS) — порт 993;

Secure POP3 (SSL-POP) — порт 995.

Протоколы электронной почты: IMAP, POP3, SMTP и HTTP

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

Протокол IMAP

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

Протокол POP3

Протокол передачи электронной почты POP (Post Office Protocol 3) обеспечивает простой, стандартизированный способ доступа пользователей к почтовым ящикам и загрузки сообщений на их компьютеры.

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

Протокол SMTP

Протокол SMTP (Simple Mail Transfer Protocol) используется агентом передачи почты (MTA) для доставки электронных сообщений на определенный сервер получателя. SMTP можно использовать только для отправки электронных писем, а не для их получения. В зависимости от настроек вашей сети или интернет-провайдера вы можете использовать SMTP-протокол только в определенных условиях.

Протоколы HTTP

HTTP не является протоколом, предназначенным для связи по электронной почте, но его можно использовать для доступа к вашему почтовому ящику. Его также нередко называют веб-электронной почтой. Он может использоваться для составления или получения электронных писем из вашей учетной записи. Hotmail — хороший пример использования HTTP в качестве протокола электронной почты.

Управляемые передачи файлов и сетевые решения

Ваша способность отправлять и получать электронную почту в основном обусловлена ​тремя протоколами TCP. Ими являются SMTP, IMAP и POP3.

Начнем с SMTP, потому что его основная функция отличается от двух других. Протокол SMTP, или Simple Mail Transfer Protocol, в основном используется для отправки электронной почты от почтового клиента (например, Microsoft Outlook, Thunderbird или Apple Mail) на сервер электронной почты. Он также используется для ретрансляции или пересылки почтовых сообщений с одного почтового сервера на другой. Это необходимо в случае, если у отправителя и получателя есть разные поставщики услуг электронной почты.

SMTP, который указан в RFC 5321, использует порт 25 по умолчанию. Он также может использовать порт 587 и порт 465. Последний, который был представлен как порт выбора для безопасного SMTP (a.k.a. SMTPS), считается устаревшим. Но на самом деле он по-прежнему используется несколькими поставщиками почтовых услуг.

Протокол почтового отделения, или POP, используется для извлечения сообщений электронной почты с почтового сервера на e-mail-клиент. Последняя версия, которая широко используется, — это версия 3, отсюда и термин «POP3».

Илон Маск рекомендует:  Asp компонент page counter

POP, версия 3, указанная в RFC 1939, поддерживает расширения и несколько механизмов аутентификации. Функции проверки подлинности необходимы, чтобы злоумышленники не получали доступ к сообщениям пользователей.

Клиент POP3 получает электронную почту следующим образом:

подключается к почтовому серверу на порту 110 (или 995 для соединений SSL/TLS);

извлекает сообщения электронной почты;

удаляет копии сообщений, хранящихся на сервере;

отключается от сервера.

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

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

Логика работы (настройки imap4):

подключается к почтовому серверу через порт 143 (или 993 для соединений SSL / TLS);

извлекает сообщения электронной почты;

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

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

Выбор между IMAP и POP3

Поскольку основная функция SMTP принципиально отлична, дилемма выбора лучшего протокола обычно включает только IMAP и POP3.

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

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

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

Например, если вы читаете сообщения A, B и C, то хотите, чтобы они также были помечены как «прочитанные» на других устройствах. Если вы удалили письма B и C, то захотите, чтобы те же сообщения удалялись из вашего почтового ящика на всех гаджетах. Все эти синхронизации могут быть достигнуты только в том случае, если вы используете IMAP.

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

Разумеется, все функциональные возможности IMAP имеют свою цену. Эти решения сложнее реализовать, и в конечном итоге протокол потребляет намного больше ЦП и ОЗУ, особенно когда он выполняет процесс синхронизации. Фактически высокая загрузка процессора и памяти может произойти как на стороне клиента, так и на стороне сервера, если есть тонна сообщений для синхронизации. С этой точки зрения протокол POP3 менее затратен, хотя и менее функционален.

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

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

Однако если все сообщения на сервере должны загружаться каждый раз, то POP3 будет работать гораздо быстрее.

Как вы можете увидеть, каждый из описываемых протоколов имеет свои преимущества и недостатки. Вам решать, какие функции или возможности важнее.

Также желаемый способ доступа к e-mail-клиенту определяет предпочтительность протокола. Пользователи, работающие только с одной машины и использующие веб-почту для доступа к своим новым электронным письмам, оценят POP3.

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

Спам-брандмауэры с SMTP, IMAP и POP3

Большинство брандмауэров для спама имеют дело только с протоколом SMTP и защищают его. Серверы отправляют и получают электронную почту SMTP, и они будут проверяться спамом-брандмауэром на шлюзе. Однако некоторые брандмауэры для спама дают возможность защищать POP3 и IMAP4, когда внешним пользователям нужны эти службы для доступа к их электронной почте.

Брандмауэры SMTP прозрачны для конечных пользователей; для клиентов нет изменений конфигурации. Пользователи по-прежнему получают и отправляют почтовые сообщения на сервер электронной почты. Так, Exchange или Dominos должны настраивать маршрутизацию сообщений на брандмауэр на основе прокси-сервера при отправке электронной почты, а также обеспечивать возможность отправки писем с брандмауэра.

IMAP (Internet Message Access Protocol)

IMAP
Международный стандарт: Internet Message Access Protocol
Уровень (по модели OSI): Прикладной
Семейство: стек протоколов TCP/IP
Порт/ID: 143/TCP, 993/TCP (IMAP over SSL)
Назначение протокола: Доступ к почтовым ящикам
Спецификация: RFC 3501
Основные реализации (клиенты): MUA (Outlook Express, Opera, Mozilla Thunderbird, The Bat!, Claws Mail, mutt)
Основные реализации (серверы): UW IMAP,
Courier,
Cyrus,
Dovecot
Вступил в силу с: 1986

IMAP (англ. Internet Message Access Protocol ) — протокол прикладного уровня для доступа к электронной почте. Базируется на транспортном протоколе TCP и использует порт 143. IMAP предоставляет пользователю обширные возможности для работы с почтовыми ящиками, находящимися на центральном сервере. Почтовая программа, использующая этот протокол, получает доступ к хранилищу корреспонденции на сервере так, как будто эта корреспонденция расположена на компьютере получателя. Электронными письмами можно манипулировать с компьютера пользователя (клиента) без постоянной пересылки с сервера и обратно файлов с полным содержанием писем.

Для отправки писем используется обычно протокол SMTP, так как собственная команда отправки протокола IMAP, называемая APPEND, считается «неудачной» и «небезопасной».

Область применения

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

Версии IMAP

  • Original IMAP
  • IMAP2
  • IMAP3
  • IMAP2bis
  • IMAP4
  • IMAP4rev1

Преимущества IMAP над POP3

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

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

Благодаря системе флагов, определенной в IMAP4, клиент может отслеживать состояние сообщения (прочитано, отправлен ответ, удалено и т. д.); данные о флагах хранятся на сервере. Клиенты IMAP4 могут создавать, переименовывать и удалять ящики и перемещать сообщения между ящиками. Кроме того, можно использовать расширение IMAP4 Access Control List для управления правами доступа к ящикам.

Поиск сообщений происходит на стороне сервера. IMAP4 имеет явный механизм расширения.

Недостатки IMAP

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

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

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

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

Общие сведения

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

Символ, используемый в качестве иерархического разделителя, может различаться в зависимости от используемого на сервере программного обеспечения. Обычно это косая черта: / , если сервер работает под управлением операционной системы, совместимой с UNIX , обратная косая черта: \ для операционной системы Windows и точка для имен групп новостей USENET.

Допускается использование различных пространств имен почтовых ящиков и, соответственно, разных иерархических разделителей. Например, если сервер IMAP предоставляет доступ к ящикам, расположенным в каталогах файловой системы UNIX и к группам новостей USENET , то в первом случае в качестве иерархического разделителя используется косая черта, а во втором – точка. Чтобы использовать и различать разные пространства имен на одном сервере IMAP , имена, принадлежащие каждому из используемых пространств, должны начинаться с некоторого префикса, обычно начинающегося символом «#». Естественно, запросы, в которых путь к ящику начинается с одного префикса, будут давать отличные результаты от таких же запросов, начинающихся с другого префикса. Используемое по умолчанию пространство имен может префикса не иметь.

Клиент может выяснить, какие именно пространства имен для почтовых ящиков каких типов поддерживаются данным сервером IMAP , если сервер поддерживает расширение NAMESPACE. Префикс и иерархический разделитель конкретного имени почтового ящика или каталога можно выяснить при помощи команды LIST.

Состояния сервера

Сервер IMAP ожидает соединения от клиентов на порту TCP 143. После установления соединения сервер посылает свое приветствие клиенту, и начинается диалог, в котором клиент посылает серверу команды, а сервер сообщает о результатах их выполнения или присылает затребованную клиентом информацию. Как и сеанс POP3, сеанс IMAP делится на несколько состояний ( states ). Допустимый набор команд зависит от текущего состояния сеанса. Сеанс может находиться в одном из следующих состояний:

  • Неаутентифицированное состояние
  • Аутентифицированное состояние
  • Выбранное состояние
  • Состояние выхода
  1. Соединение без предварительной аутентификации
  2. Соединение с предварительной аутентификацией
  3. Отвергнутое соединение
  4. Успешная аутентификация
  5. Успешное выполнение команды SELECT или EXAMINE
  6. Команда CLOSE или неудачное завершение команды SELECT или EXAMINE
  7. Команда LOGOUT или потеря связи

Команды протокола IMAP

Команды клиента и ответы сервера IMAP

Команда клиента состоит из идентификатора (ярлыка) – короткой строкой, состоящей из букв и цифр, не повторяющейся в других командах в течение всего сеанса. За ярлыком следует сама команда и ее аргументы. Регистр символов в названиях команд, как и в большинстве аргументов, как правило, не имеет значения.

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

Илон Маск рекомендует:  Iis остановка изолированных приложений

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

В ответах сервера, сообщающих об исполнении команд, в качестве метки используется ярлык соответствующей команды. Это помеченные ответы. За ним следует одно из ключевых слов:

  • OK (успешное выполнение)
  • NO (невыполнение)
  • BAD (ошибка в команде)

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

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

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

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

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

Сервер может передавать литерал, не дожидаясь разрешения клиента, клиент, прежде чем передавать литерал, должен дождаться разрешения – строки, начинающейся с метки «+». Например:

Команды, допустимые при любом состоянии сеанса IMAP

CAPABILITY

В ответ на эту команду сервер присылает непомеченную строку с ключевым словом CAPABILITY, содержащую список поддерживаемых возможностей (расширений) и их параметров. В число возможностей входит в частности поддерживаемая версия протокола IMAP – IMAP4rev1 и механизмы аутентификации. Возможности IMAP описываются в различных RFC или могут вводиться разработчиками. В последнем случае их названия должны начинаться с буквы Х. Названия стандартных возможностей с этой буквы начинаться не могут.

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

LOGOUT

Команды неаутентифицированного состояния

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

Серверы IMAP могут допускать анонимный доступ к некоторым почтовым ящикам. Анонимный пользователь регистрируется под именем anonymous, в качестве пароля используется адрес электронной почты пользователя, имя его домена, произвольный набор символов или пустая строка. Анонимный доступ возможен как при передаче пароля открытым текстом, так и с использованием SASL. Возможности анонимного клиента должны быть строго ограничены, как правило, он не получает прав на изменение какой-либо информации на сервере.

STARTTLS

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

LOGIN

LOGIN регистрационное_имя_пользователя пароль

Аутентификация при помощи регистрационного имени и пароля, передаваемых открытым текстом.

AUTHENTICATE

Передача зашифрованных аутентификационных данных с использованием SASL.

Команды аутентифицированного состояния

В аутентифицированном состоянии клиент производит различные манипуляции с почтовыми ящиками.

SELECT

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

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

EXAMINE

Аналогично команде SELECT , но почтовый ящик открывается только для чтения.

CREATE

Создает новый почтовый ящик или каталог.

Если объект создается не в корневом каталоге, то надо указать путь к нему.

Если на конце указанного имени стоит символ, используемый в качестве иерархического разделителя, создается каталог.

DELETE

Удаляет указанный почтовый ящик. Эта же команда удаляет также и каталоги, если они не содержат почтовые ящики.

RENAME

RENAME имя_ящика новое_имя_ящика

Переименование почтового ящика.

SUBSCRIBE

Почтовый ящик помечается как «активный». Эта пометка используется для вывода списка почтовых ящиков при помощи команды LSUB.

UNSUBSCRIBE

Снимает с почтового ящика пометку «активный». Эта пометка может быть снята с почтового ящика только при помощи команды UNSUBSCRIBE. Даже если ящик больше не существует, это не может само по себе стать причиной снятия пометки «активный».

LIST путь_к_ящику имя_ящика

Возвращает список каталогов и почтовых ящиков, соответствующих указанным аргументам.

В имени ящика могут использоваться групповые символы: * , обозначающий любые символы и % , обозначающий любые символы кроме иерархических разделителей.

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

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

RFC 3501 предусматривает четыре атрибута:

  • \Noinferiors – объект нижнего уровня иерархии – почтовый ящик, не каталог
  • \Noselect – объект – каталог, он не может быть выбран командой SELECT
  • \Marked – почтовый ящик отмечен как представляющий интерес, это означает, что со времени последнего обращения к ящику туда были добавлены новые сообщения
  • \Unmarked – со времени последнего обращения в почтовый ящик не поступило новых сообщений

В описанном в RFC 3348 расширении CHILDREN предусмотрены еще два атрибута, позволяющие определить, содержит ли каталог почтовые ящики или подкаталоги:

  • \HasChildren – каталог содержит почтовые ящики или подкаталоги;
  • \HasNoChildren – объект не содержит почтовых ящиков или подкаталогов, доступных пользователю, аутентифицированному в данном сеансе.

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

Если оба аргумента команды LIST пустые, то сервер возвращает только используемый по умолчанию иерархический разделитель.

LSUB путь_к_ящику имя_ящика

Команда LSUB аналогична команде LIST , но она возвращает только имена почтовых ящиков с пометкой «активный».

STATUS

STATUS имя_ящика (имена_элементов)

Возвращает запрошенные элементы информации об указанном почтовом ящике. Имена элементов информации разделяются пробелами и все вместе заключаются в скобки. Предусмотрены следующие имена элементов информации:

  • MESSAGES – общее количество сообщений в ящике
  • RECENT – количество новых сообщений
  • UIDNEXT –уникальный идентификатор, который изменяется всякий раз, когда в почтовый ящик помещается новое сообщение
  • UIDVALIDITY – уникальный идентификатор почтового ящика
  • UNSEEN – количество сообщений, не помеченных как прочитанные

Ответ представляет собой непомеченную строку с ключевым словом STATUS , за которым следует имя опрашиваемого почтового ящика, после которого в скобках перечисляются имена запрошенных элементов и их числовые значения.

Добавляет сообщение в конец указанного почтового ящика. В качестве аргументов указываются имя ящика, флаги сообщения (не обязательно), метка времени (не обязательно) и само сообщение – заголовок и тело.

Имеются следующие флаги сообщений:

  • \ Seen – прочитано
  • \ Answered – написан ответ
  • \ Flagged – срочное
  • \ Deleted – помечено для удаления
  • \ Draft – черновик
  • \Recent – новое сообщение, оно поступило в почтовый ящик после окончания прошлого сеанса

Если в команде указаны флаги, то они устанавливаются для добавляемого сообщения. В любом случае для сообщения устанавливается флаг \Recent.

Если в команде задана метка времени, то это время будет установлено в качестве времени создания сообщения, в противном случае за время создания принимается текущее время.

Поскольку сообщение состоит не из одной строки, используются литералы.

Команды выбранного состояния

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

CHECK

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

CLOSE

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

EXPUNGE

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

SEARCH кодировка_символов критерии_поиска

Поиск в выбранном почтовом ящике сообщений, отвечающих указанным критериям поиска.

Необязательный первый аргумент команды состоит из слова «CHARSET» и названия кодировки, используемой в критериях поиска. Кодировку нужно указывать, только если она отличается от стандартной US-ASCII.

Второй аргумент содержит один или более критериев поиска.

Критерий поиска состоит из ключевого слова и аргумента. Критерии также можно объединять, заключая в скобки. Это бывает удобно при использовании ключевых слов NOT и OR.

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

FETCH

FETCH х:у имя_элемента_сообщения_или_макрос

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

Во втором аргументе перечисляются запрашиваемые информационные элементы.

COPY х:у имя_ящика

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

UID команда аргументы Команда UID принимает в качестве аргументов команды COPY, FETCH или STORE с их аргументами, но наряду с номерами сообщений в ответах указываются уникальные идентификаторы сообщений.

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

Работа с IMAP в Synapse #1

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

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

Думаю, что это одно из ключевых преимуществ IMAP — нет необходимости ждать пересылку всего письма с сервера, если все, что нам требуется — это посмотреть его заголовок. Естественно, у протокола IMAP имеется ещё ряд преимуществ по сравнению с POP3, но во всех прелестях IMAP мы будем знакомиться, думаю, что на протяжении ещё пары-тройки статей, а пока начнем рассмотрение работы с IMAP в Synapse с самых-самых простых операций.

Илон Маск рекомендует:  Использование форм в visual foxpro

Итак, что из себя представляет протокол IMAP:

В Synapse для работы с IMAP используется модуль imapsend.pas, который содержит один единственный класс:

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

Форма для логина на сервер IMAP

Теперь попробуем залогиниться на почтовом сервере. Снова обращаю Ваше внимание на тот факт, что

В OnCreate и OnDestroy формы пишем:

Пишем такой обработчик OnClick:

Теперь разберемся, что здесь происходит, зачем и почему именно так, а не иначе.

У класса TImapSend нет собственных свойств для логина/пароля и хоста/порта, но т.к. этот класс — наследник TSynaClient у которого эти свойства присутствуют, то мы свободно ими воспользовались.

Почтовый сервер может использовать как SSL, так и TLS, поэтому предусматриваем эти ситуации. При этом не забываем:

Далее мы пробуем залогиниться на сервере, используя метод Login:

Метод логин работает следующим образом:
1. Пробуем установить соединение с сервером. Если соединение выполнено, то сервер вернет нам либо

что будет означать, что логин уже выполнен, либо строкой

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

3. Проверяется необходимо ли использовать TLS при работе. Если в списке возможностей имеется STARTTLS, то пробуем использовать TLS (для этого свойство AutoTLS должно быть True) и снова отправляем команду CAPABILITY, чтобы заполнить список возможностей сервера.
4. Пробуем отправить команду LOGIN на сервер. Для этого используется protected-метод AuthLogin. Логин и пароль в этом случае отправляются в открытом виде.
5. Если логин прошел успешно, то сервер ответит «OK», а свойство класса AuthDone станет равным True.

После того, как мы залогинились на сервере мы можем сразу посмотреть где мы находимся в данный момент и отправлять на сервер различные команды. Итак, вначале посмотрим, что будут содержать свойства TImapSend после логина на сервере mail.ru.

Для того, чтобы посмотреть, что отвечает нам сервер я положил на форму компонент TMemo, написал такой обработчик события OnReadFilter сокета:

и назначил этот обработчик в OnCreate формы:

Теперь запускаем нашу программку, задаем логин и пароль доступа к почтовому ящику на mail.ru и пробуем залогиниться. После клика по кнопке «Login» в Memo появятся такие строки, содержащие ответы сервера:
* OK Welcome
* CAPABILITY IMAP4rev1 ID XLIST UIDPLUS STARTTLS LOGINDISABLED
S1 OK CAPABILITY completed
S2 NO Command disabled. Please use STARTTLS first.

все в соответствии с тем, как работает метод Login у TImapSend, т.е.:
1. Соединение было установлено, сервер с нами поздаровался и предложил залогиниться (строка 1)
2. Мы попросили список возможностей сервер и сервер нам ответил (строки 2,3)
3. Мы попробовали отправить на сервер логин и пароль, но сервер нам отказал в аутентификации, т.к. мы забыли подключить TLS.
Теперь, включаем TLS (ставим флажок у чекбокса AutoTLS) и снова пробуем залогиниться. Логин проходит успешно, о чем нам говорит лог:
* OK Welcome
* CAPABILITY IMAP4rev1 ID XLIST UIDPLUS STARTTLS LOGINDISABLED
S3 OK CAPABILITY completed
S4 OK Starting TLS.
* CAPABILITY IMAP4rev1 > S5 OK CAPABILITY completed
* CAPABILITY IMAP4rev1 ID XLIST UIDPLUS
S6 OK Authentication successful
Теперь посмотрим, что содержат свойства класса после логина.

Статусная строка, содержащая результат последней операции. После успешной аутентификации она у нас будет содержать:
S4 OK Authentication successful
и, соответственно, свойство

imap_delete

(PHP 4, PHP 5, PHP 7)

imap_delete — Пометить сообщение для удаления

Описание

Помечает сообщения, перечисленные в msg_number для удаления. Помеченные сообщения будут оставаться в ящике пока не будет вызвана функция imap_expunge() , либо imap_close() с установленным параметром CL_EXPUNGE .

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

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

Можно задать как FT_UID , тогда функция будет ожидать в параметре msg_number не номер сообщения, а UID.

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

Возвращает TRUE .

Примеры

Пример #1 Пример использования imap_delete()

= imap_open ( «INBOX» , «username» , «password» )
or die( «Не удалось подключиться: » . imap_last_error ());

$check = imap_mailboxmsginfo ( $mbox );
echo «Сообщения до отметки для удаления: » . $check -> Nmsgs . «
\n» ;

imap_delete ( $mbox , 1 );

$check = imap_mailboxmsginfo ( $mbox );
echo «Сообщения после отметки для удаления: » . $check -> Nmsgs . «
\n» ;

$check = imap_mailboxmsginfo ( $mbox );
echo «Сообщения после удаления: » . $check -> Nmsgs . «
\n» ;

Примечания

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

Смотрите также

  • imap_undelete() — Снимает с сообщения метку удаления
  • imap_expunge() — Удалить все помеченные для удаления сообщения
  • imap_close() — Закрыть поток IMAP

User Contributed Notes 10 notes

the function is using the message number (and not the uid !)
$u >uid;
$msgno = $mail->msgno;

if you want to use the uid, simply option value
imap_delete($mbox, $uid, FT_UID);

This function seems not to work on «[Gmail]/All Mail» mailbox. This is because Gmails keeps only one copy of the message and mailboxes are no more than labels.
Deleting a message from a mailbox only removes that label (except for «All Mail» mailbox).
To delete from «All Mail» you have to use imap_mail_move() function and move the message to «[Gmail]/Trash» mailbox.

Note: Names of mailboxes in Gmail depends on the language you’re using. E.g.: in Spanish «All Mail» is «Todos» and «Trash» is «Papelera».

After a little experimentation i found out how to mark a single message for deletion.

imap_delete ( $mbox , » $msgid : $msgid » );

?>

imap_delete() seems to want a range, so to select one, simply range from your id to your id.

Hope this helps.

Just so anyone using this function is aware: if you mark an email to be deleted from a mailbox, that flag does not persist. You need to call imap_expunge() or use the CL_EXPUNGE option with imap_close() to remove the marked email in the same PHP script you marked it in.

I hope this helps someone out.

I couldn’t get imap_delete to work when I used it with pop3. Instead i wrote:
function pop3_dele ( $connection , $message )
<
$status = imap_setflag_full ( $connection , ‘1:’ . $message , ‘\\Deleted’ );
imap_expunge ( $connection );
return $status ;

In case you feel the need to kill all emails from before a certain year on your Gmail account, this would work:

( E_ALL ^ ( E_NOTICE | E_WARNING ));

echo «parsing ini file. \n» ;
$ini = parse_ini_file ( ‘g.ini’ );
$user = $ini [ ‘user’ ];
$pass = $ini [ ‘pass’ ];
$year = $ini [ ‘year’ ];
echo «account < $user >— killing msgs from before < $year >\n\n» ;

echo «connecting. \n» ;
$imap = imap_open ( «[Gmail]/All Mail» , $user , $pass ) or die( «can’t connect: » . imap_last_error () . «\n» );

echo «checking current mailbox. \n» ;
$mbox = imap_check ( $imap );

echo «fetching overview. \n» ;
$flaggedForDelete = 0 ;
for( $n = 0 ; $n $mbox -> Nmsgs ; $n ++) <
echo «processing < $n >of < $mbox ->Nmsgs > . \r» ;
$hdr = imap_fetchheader ( $imap , $n );
preg_match ( ‘/^Date: (.*?)$/m’ , $hdr , $matches );
$date = date_parse ( strtotime ( $matches [ 1 ]));
if( $date [ ‘year’ ] $year ) <
imap_delete ( $imap , $msg -> msgno );
$flaggedForDelete ++;
>
>

echo «expunging mailbox ( < $flaggedForDelete >messages flagged). » ;
echo (( imap_expunge ( $imap )) ? «ok» : «failed!» ). «\n» ;
imap_close ( $imap );

Somehow, when ever I try to delete an email using the message number returned by imap_header, any email with a message number below 999 will fail.

I discovered that the imap_header will pad the message number with spaces. You will need to trim the number before calling imap_delete.

I am using qmail and it took me over a month to figure it out.

Hope this will be helpful to some poor soul out there facing the same problem.

// is not a complete code but enough to clear out an entire mailbox.
// hope this can save your time :-)

if (isset( $_REQUEST [ ‘DoNow’ ]))
<
# PULL ADDITIONAL FILES
include_once ( «common.php» );

$conn = @ imap_open ( «\< $server / $serverType >Trash» , $user , $pass )
or die( «Connection to folder failed» );

$headers = @ imap_check ( $conn );
( $headers -> Nmsgs > 0 ) or die( «Trash is empty already !» );

// delete email(s)
@ imap_delete ( $conn , ‘1:*’ ); // to clear out an entire mailbox.
@ imap_expunge ( $conn );
echo «Trash is empty.» ;

I had some major issues deleting emails using this function. Using IIS 5.0 and a win based Mail Server, I could not delete the emails individually.

My script merely needed to check the emails and update the database for bounce backs, after which I simply wanted to erase all emails.

If imap_delete($mbox,$email->MsgNo) just isnt working for you, you can try using

to clear out an entire mailbox.

Hope this helps cause it drove me insane for about 5 hours. :)

I think you don’t have to give a range to imap_delete() if you want to delete a single one.

Удаление писем с сервера по IMAP

Добрый день! Столкнулся со следующей проблемой.

Имеется ящик на outlook.com, в данную учетную запись по IMAP собирается почта с доменного ящика. Использую Outlook 2020.

Как настроить автоматическое удаление писем с сервера хостера? Если в настройках IMAP записи ящика, подключенного в Outlook 2020 была настройка «удалять письма при переключении папок в интернете», то здесь с Exchange от Outlook.com настройки весьма скудные и непонятно, где это настраивать.

Сейчас при удалении в Outlook 2020 (средства очистки/очистить папку удаленные) удаление писем из корзины удаляет письма и в папке удаленные outlook.com, но не удаляет с сервера хостинга.

Техподдержка хостинга пишет следующее » Это поведение зависит от вашего почтового клиента, например в Thunderbird этот функционал работает по умолчанию. Проверьте настройки Outlook на параметры вроде “Локальное удаление”, “Синхронизация”, и т.д. «

Imap_delete не работает

Я использую php imap для анализа сообщения из веб-почты. Я могу получать сообщения один за другим и сохранять их в БД. После сохранения я хочу удалить сообщение «Входящие». Функция imap_delete здесь не работает. Мой код выглядит следующим образом:

Я также тестировал — imap_expunge($connection);
Но это не работает. Сообщения не удаляются. Пожалуйста, помогите мне.

Вы смешиваете POP и IMAP.

Это не сработает. Вам нужно открыть соединение с IMAP. См. Этот пример:

На самом деле имена функций похожи на pop3. но они выполняют функции imap. как —

imap_delete не работает

Я использую функции php imap для разбора сообщения из веб-почты. Я могу получать сообщения по одному и сохранять их в БД. После сохранения я хочу удалить входящие сообщения. Функция imap_delete здесь не работает. Мой код такой:

Я также тестировал — imap_expunge($connection);
Но это не работает. Сообщения не удаляются. Пожалуйста, помогите мне .

2 ответа

Вы смешиваете POP и IMAP.

Это не сработает. Вам нужно открыть соединение с IMAP. Смотрите этот пример:

На самом деле имена функций похожи на pop3. но они выполняют функциональность IMAP. лайк —

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