Лекция 14 - Электронная почта. Формат сообщения. Протоколы SMTP, POP3, IMAP4.

 

 Электронная почта.

Служба электронная почта - предназначена для обмена сообщениями (письмами).

Клиент (MS Outlook, The bat ...) готовит ("упаковывает") и посылает серверу (почтовое отделение) сообщения, принимает и просматривает сообщения.

Сервер электронной почты (Sendmail, MS Exchange ...) обрабатывает сообщения (сортирует) и отправляет локальному адресату или удаленному серверу (почтовому отделению).

Электронная почта во многом похожа на обычную почтовую службу.

8-1

Отправка и получение почты

Основные протоколы:

  • SMTP (Simple Mail Transfer Protocol) - простой протокол передачи почты, используется для отправки почты, как клиентом на сервер, так и сервером на другой сервер.

  • POP3 (Post Office Protocol) - используется для приема почты клиентом с сервера.

  • IMAP 4 (Internet Message Access Protocol) -

  • UUCP (Unix-Unix-CoPy) - используется для отправки и приема почты, как клиентом на(с) сервер(а), так и сервером на другой сервер. В данное время почти не используется, поэтому рассматривать не будем.

 Формат сообщения.

Первый стандарт - RFC0724 (Proposed official standard for the format of ARPA Network messages D. Crocker, K.T. Pogran, J. Vittal, D.A. Henderson May-12-1977).

Последняя версия - RFC2822 (Internet Message Format P. Resnick, Ed. April 2001).

Текстовая (ASCII) информация может передаваться, как есть.

Остальная информация должна быть закодирована, т.к. изначально не предполагалось ее передавать. При использовании расширения протокола SMTP - ESMTP (Enhaced SMTP) можно кодировать в 8-битном виде. Это все выполняет почтовая программа.

Виды кодирования:

base64 - кодирует из набор 00-FFв ASCII, чтобы можно было передавать по SMTP (кодируют бинарные файлы).

7bit - не кодирует, указывает, что код ASCII.

8bit - указывает, что не только символы ASCII.

quoted-printable - используется для кодирования национальных языков, символов второй части таблицы ("А" - "=3D").

Сообщение состоит из:

  • конверта сообщения (информация для доставки и обработки сообщения)

  • тела сообщения (данные отправителя)

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

Примеры сообщений:


From: <vasy@list.ru> // адрес отправителя
To: <pety@kfti.knc.ru> // адрес получателя
Subject: С новым годом! // тема сообщения
Mime-Version: 1.0 // инициализация Mime
X-Mailer: mPOP Web-Mail 2.19 // тип и версия почтовой программы клиента
Date: Fri, 19 Sep 2003 08:37:43 +0400 // дата отправки сообщения
Reply-To: <vasy@list.ru> // адрес для ответа
Content-Type: text/plain; charset=koi8-r // тип и подтип MIME
Content-Transfer-Encoding: 8bit // идентификатор типа кодировки
Message-Id: <E1A0D1b-000AnC-00.vasy-list-ru@f15.mail.ru> // уникальный идентификатор сообщения

С новым годом Петя! //Тело сообщения

Пример простого сообщения


Received: by dionis.kfti.knc.ru with SMTP; Thu, 10 Oct 2002 16:00:49 +0400 (MSK)
Message-ID: <005f01c27055$b0be7c80$6df155c2@kfti.knc.ru>
From: "Katia" <katia@dionis.kfti.knc.ru>
To: <gena@dionis.kfti.knc.ru>
Cc: "Dima" <dima@kfti.knc.ru>,"Lena" <lena@kfti.knc.ru>
Subject: С новым годом!
Date: Thu, 10 Oct 2002 16:08:05 +0400
Organization: KPhTI
MIME-Version: 1.0
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200

Пример заголовка сообщения с отправкой нескольким пользователям (поле Ccsmile


From: dima@dionis.kfti.knc.ru
To: igor@dionis.kfti.knc.ru
Subject: С новым годом!
Received: by nmc.tatarstan.ru; Fri, 06 Dec 2002 13:53:32 +0300 (msk)
Received: by kabmin.kazan.su; Fri, 06 Dec 2002 13:48:16 +0400 (MSK)
Received: by nmc.tatarstan.ru; Thu, 05 Dec 2002 18:47:11 +0300 (msk)
Received: from spider.ts by nmc.tatarstan.ru with SMTP; Thu, 05 Dec 2002 18:37:26 +0300 (msk)
Received: (qmail 3541 invoked from network); 5 Dec 2002 15:38:24 -0000
Received: from unknown (HELO mvv) (192.168.103.44) by spider.ts with SMTP; 5 Dec 2002 15:38:21 -0000
Organization: Techoserv A/S
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Dipost Crypto (v2.50C)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-Copy-From: gena@kabmin.tatarstan.ru
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="---Factor Dimail---"

Пример заголовка сообщения с промежуточными серверами (поле - Receivedsmile


X-DIONIS-Forwarded: by <library@dionis.kfti.knc.ru> to <bogomolov@dionis.kfti.knc.ru> at Tue, 22 Feb 2000 14:42:05 +0300 (MSK)
Received: by nmc.tatarstan.ru; Tue, 22 Feb 2000 14:41:51 +0400 (msk)
Received: from ben.irex.ru by nmc.tatarstan.ru with SMTP; Tue, 22 Feb 2000 14:34:01 +0400 (msk)
Received: from unknown ([195.178.196.156])
by ben.irex.ru (8.9.3/8.9.1) with SMTP id NAA25654;
Tue, 22 Feb 2000 13:29:41 +0300
Message-ID: <014801bf7d20$1a388380$9cc4b2c3@ben.irex.ru>
From: "Jakubson Olga" <springer@ben.irex.ru>
To: <bob@bionet.nsc.ru>
Cc: <orlov@iephb.ru>, <sln@ipae.uran.ru>, <nov@ieie.nsc.ru>,
<rita@ief.uran.ru>, <library@ineos.ac.ru>, <bibl@ISEM.SEI.IRK.RU>,
<pbl@ibrae.ac.ru>, <alekhina@omrb.pnpi.spb.ru>,
<library@dionis.kfti.kcn.ru>, <ieshko@krc.karelia.ru>,
<igourevi@ccas.ru>, <cnb@post.krascience.rssi.ru>, <root@ksc.komi.ru>,
<beht@kti.nsc.ru>, <lib@tdi.nsk.su>, <ognev@nfi.kiae.su>,
<liogn@geocities.com>, <semenov@min.mus.msk.ru>, <root@omega.laser.ru>,
<ldisk@fo.gpi.ac.ru>
Subject: Acedemic Press
Date: Tue, 22 Feb 2000 13:30:48 +0300
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2014.211
X-Mimeole: Produced By Microsoft MimeOLE V5.00.2014.211
FileName: 001.html, APPEAL Schedule I.doc, Russia Trial Add.2000 jede Institution.doc

Пример заголовка сообщения с прикрепленными файлами (FileName).


Received: by nmc.tatarstan.ru; Tue, 28 Dec 1999 12:21:13 +0400 (msk)
Message-Id: <adn_1110_0_@nmc.tatarstan.ru>
X-DIONIS-Forwarded: by <webmaster@nmc.tatarstan.ru> to <bogomolov@dionis.kfti.kcn.ru> at Tue, 28 Dec 1999 12:18:25 +0400 (msk)
Received: from oracle.m9.am.ru by nmc.tatarstan.ru with SMTP; Tue, 28 Dec 1999 12:00:56 +0400 (msk)
Received: (from ar@localhost)
by oracle.m9.am.ru (8.8.8/8.8.8) id MAA01876
for webmaster@if.kazan.ru; Tue, 28 Dec 1999 12:01:51 +0300
Date: Tue, 28 Dec 1999 12:01:51 +0300
Message-Id: <199912280901.MAA01876@oracle.m9.am.ru>
From: InterReklama Administrator <support@bizlink.ru>
To: Влад <webmaster@if.kazan.ru>
Reply-to: InterReklama Administrator <support@bizlink.ru>
Subject: HTML-код
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="BANNERBANK_280830843726477"

--BANNERBANK_280830843726477
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 8bit

Здравствуйте!

Посылаю файл wget.tgz

--BANNERBANK_280830843726477
Content-Type: application/octet-stream; name="wget.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="wget.tgz"

H4sICHc5pzYAA3dnZXQxNTMudGFyAOw8a1PbyLL7NfoVfSC1GAoZm+eGbLYg
PBJXwFDYSTZ1zqlkLI3tucga7WiE8X44v/1290iybCBx2GzOrbpxbYwlzXT3
9Lt7RjseSOs36zv1rY2f/q4PbDf2dnYA/+41t/fwL36am+6v+zQAdncbzZ3G
...
...
...
vUav0Wv0Gr1Gr9Fr9Hr61/8PvGbSyABoGgA=

--BANNERBANK_280830843726477--

Пример заголовка сообщения с прикрепленным файлом

 Некоторые поля заголовка:

From - адреса отправителей.

Sender - адрес реального отправителя.
Пример:
From: vasy@mail.ru
pety@mail.ru
Sender: misha@mail.ru

To - адрес получателя.

Cc - адреса получателей копий сообщений.
Пример:
To: vasy@mail.ru
pety@mail.ru
Cc: misha@mail.ru, katy@mail.ru

Date - дата отправки сообщения.

Subject - тема сообщения.

Message-ID - уникальный идентификатор сообщения.

Reply-To - адрес для ответа.

Received - адреса и время обработки сообщения промежуточным сервером.

X-Mailer - тип и версия почтовой программы клиента.

Comments - комментарии.

Priority - приоритетность.

Organization - название организации отправителя

MIME-Version - поле для идентификации стандарта MIME, значит письмо использует MIME.

Content-Type - тип и подтип MIME (text/html,audio/midi).

Content-Transfer-Encoding - идентификатор типа кодировки (base64, quoted-printable, 7bit, 8bit, binary и т.д.).

base64 - кодирует из набор 00-FFв ASCII, чтобы можно было передавать по SMTP (кодируют бинарные файлы).

7bit - не кодирует, указывает что код ASCII.

8bit - указывает, что не только символы ASCII.

quoted-printable - используется для кодирования национальных языков, символов второй части таблицы ("А" - "=3D").

 Протокол SMTP

Первый стандарт - RFC0788 (Simple Mail Transfer Protocol J. Postel Nov-01-1981).

Последняя версия - RFC2821 (Simple Mail Transfer Protocol J. Klensin, Ed. April 2001).

Simple Mail Transfer Protocol - протокол высокого уровня (а именно, уровня приложений), используется для отправки почты, как клиентом на сервер, так и сервером на другой сервер.

Порт по умолчанию - 25.

Основной недостаток протокола, это отсутствие аутентификации и "докачки" (как в FTP, HTTP) сообщений, т.е. если вы посылаете большое письмо (10Мбайт), то в случае разрыва соединения ваше сообщение придется передавать заново, и возможно так до бесконечности. Поэтому большие письма необходимо резать на части.

 Модель протокола

События работы SMTP протокола:

  • Клиент инициирует соединение с сервером

  • Клиент посылает запросы на обслуживание

  • Сервер отвечает на эти запросы

8-2

Модель протокола SMTP

 Последовательность команд SMTP

Протокол SMTP оговаривает последовательность SMTP-команд

Рассмотрим пример:

Некий Vasy абонент сервера kstu.ru, посылает письма трем абонентам сервера kazan.ru (Pety, Koly, Dima) одно письмо.

Рассмотрим листинг передачи сервера kstu.ru серверу kazan.ru:

R - сервер (receive)

S - клиент (send)


R 220 kazan.ru Simple Mail Transfer Service Ready // код ответа 220 (соединение установлено), сервер kstu.ru, протокол SMTP
S HELO kstu.ru // Соединение установлено, "Я kstu.ru", идентификация производится по kstu.ru
R 250 kazan.ru // команда принята и обработана, идентификация прошла
S MAIL FROM: <Vasy@kstu.ru> // Начало почтовой транзакции, обратный адрес Vasy@kstu.ru.
R 250 OK // Сервер согласен принять сообщение от Vasy@kstu.ru
S RCPT TO:<Pety@kazan.ru> // Кому отправить письмо, Pety@kazan.ru
R 250 OK // Сервер согласен принять сообщение для Pety@kazan.ru
S RCPT TO:<Koly@kazan.ru> // Еще кому отправить письмо, Koly@kazan.ru
R 550 No such user here // Сервер выдает ошибку 550, сообщая, что такого пользователя нет
S RCPT TO:<Dima@kazan.ru> // Еще кому отправить письмо, Dima@kazan.ru
R 250 OK // Сервер согласен принять сообщение для Dima@kazan.ru
S DATA // Запрос на передачу данных
R 354 Start mail input; end with <CRLF>.<CRLF> // Разрешение передачи данных, последняя строка должна содержать "точку"
S From: <vasy@list.ru> //Текст сообщения (включая заголовок)...
S To: <pety@kfti.knc.ru>
S Subject: С новым годом!
S Mime-Version: 1.0
S X-Mailer: mPOP Web-Mail 2.19
S Date: Fri, 19 Sep 2003 08:37:43 +0400
S Reply-To: <vasy@list.ru>
S Content-Type: text/plain; charset=koi8-r
S Content-Transfer-Encoding: 8bit
S Message-Id: <E1A0D1b-000AnC-00.vasy-list-ru@f15.mail.ru>
S
S С новым годом Петя!
S . // Конец сообщения, клиент послал точку
R 250 OK // Сервер получил данные
S QUIT // Клиент делает запрос на закрытие соединения
R 221 kazan.ru Service closing transmission channel // Сервер закрывает соединение

 Некоторые команды SMTP

Обязательные команды (команды которые должны присутствовать всегда)

HELO - Открытие сеанса связи (hello).

MAIL - Начинает почтовую транзакцию, которая завершается передачей данных в один или несколько почтовых ящиков (mail).

RCPT - Идентифицирует получателя почтового сообщения (recipient).

Небязательные команды

DATA - Строки, следующие за этой командой, рассматриваются получателем как данные почтового сообщения. В случае SMTP, почтовое сообщение заканчивается комбинацией символов: CRLF-точка-CRLF.

RSET - Прерывает текущую почтовую транзакцию (reset).

NOOP - Требует от получателя не предпринимать никаких действий, а только выдать ответ ОК. Используется главным образом для тестирования.(No operation).

QUIT - Закрытие сеанса связи.

VRFY - Требует от приемника подтвердить, что ее аргумент является действительным именем пользователя.

SEND - Начинает почтовую транзакцию, доставляющую данные на один или несколько терминалов (а не в почтовый ящик).

SOML - Начинает транзакцию MAIL или SEND, доставляющую данные на один или несколько терминалов или в почтовые ящики.

SAML - Начинает транзакцию MAIL и SEND, доставляющие данные на один или несколько терминалов и в почтовые ящики.

EXPN - Команда SMTP-приемнику подтвердить, действительно ли аргумент является адресом почтовой рассылки и если да, вернуть адрес получателя сообщения (expand).

HELP - Команда SMTP-приемнику вернуть сообщение-справку о его командах.

TURN - Команда SMTP-приемнику либо сказать ОК и поменяться ролями, то есть стать STMP- передатчиком, либо послать сообщение-отказ и остаться в роли SMTP-приемника.

 Синтаксис некоторых команд SMTP

Команды, MAIL, SEND, SOML и SAML, имеют одинаковый синтаксис:

MAIL <пробел> FROM:<reverse-path> <carriage-return line-feed>

где:

<reverse path> (обратный адрес) указывает серверу, кому в случае ошибки отослать сообщение.

<carriage-return line-feed> (CRLF) возврат каретки.

Примечание: Команды SEND, SOML и SAML дополнительны и используются довольно редко.

Синтаксис RCPT похож на синтаксис команды MAIL:

RCPT <пробел> TO:<forward-path> <CRLF>

Однако, в отличие от MAIL, аргумент RCPT начинается со слова <ТО:>.

 Некоторые коды ответов SMTP

Каждая цифра в коде ответа имеет определенный смысл. Первая цифра означает, было ли выполнение команды успешно (2), неуспешно (5) или еще не закончилось (3). Как указано в приложении Е документа RFC 821, простой SMTP-клиент может анализировать только первую цифру в ответе сервера, и на основании ее продолжать свои действия. Вторая и третья цифры кода ответа разъясняют значение первой. Если вы разрабатываете SMTP-приложение, обязательно изучите конструкцию всех кодов SMTP-ответа.


211 Ответ о состоянии системы или помощь
214 Сообщение-подсказка (помощь)
220 <имя_домена> служба готова к работе
221 <имя_домена> служба закрывает канал связи
250 Запрошенное действие почтовой транзакции успешно завершилось
251 Данный адресат не является местным; сообщение будет передано по маршруту <forward-path>
354 Начинай передачу сообщения. Сообщение заканчивается комбинацией CRLF-точка-CRLF
421 <имя_домена> служба недоступна; соединение закрывается
450 Запрошенная команда почтовой транзакции не выполнена, так как почтовый ящик недоступен
451 Запрошенная команда не выполнена; произошла локальная ошибка при обработке сообщения
452 Запрошенная команда не выполнена; системе не хватило ресурсов
500 Синтаксическая ошибка в тексте команды; команда не опознана
501 Синтаксическая ошибка в аргументах или параметрах команды
502 Данная команда не реализована
503 Неверная последовательность команд
504 У данной команды не может быть аргументов
550 Запрошенная команда не выполнена, так как почтовый ящик недоступен
551 Данный адресат не является местным; попробуйте передать сообщение по маршруту <forward-path>
552 Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполнилось
553 Запрошенная команда не выполнена; указано недопустимое имя почтового ящика
554 Транзакция не выполнена

 Ретрансляция сообщений

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

Пример:

передадим сообщение от Vasy@ksu.ru через хосты @kstu.ru, @mail.ru получателю Koly@kazan.ru

Механизм ретрансляции:

  • сообщение передается хосту @kstu.ru
    S MAIL FROM:<Vasy@ksu.ru>
    S RCPT TO:<@kstu.ru, @mail.ru, Koly@kazan.ru>

  • сообщение передается хосту @mail.ru
    S MAIL FROM:<@kstu.ru>
    S RCPT TO:<@mail.ru, Koly@kazan.ru>

  • ообщение передается хосту kazan.ru
    S MAIL FROM:<@mail.ru>
    S RCPT TO:<Koly@kazan.ru>

При этом параметры To, From и Cc остаются без изменений.

 Резервные почтовые серверы (relay)

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

8-3

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

 Отправка сообщения на SMTP с помощью Telnet

Отправим письмо через Telnet.

Клиенту необходимо ввести следующие строки:


HELO
MAIL FROM: <bogomolov@kfti.knc.ru>
RCPT TO: <olga@kfti.knc.ru>
DATA
DATE: 27-Oct-2003 12:48:32
FROM: Влад Богомолов <bogomolov@kfti.knc.ru>
SUBJECT: С новым годом!
To: <olga@kfti.knc.ru>

С новым годом!
Влад!
.

Подключение и отправка письма telnet'ом (UNIX) на сервер SMTP (Дионис)

8-6

Подключение и отправка письма telnet'ом (Windows) к серверу SMTP (Дионис)

8-5

Подключение и отправка письма telnet'ом (UNIX) к серверу SMTP-Sendmail 8.12.8 (UNIX)

8-7

 

 

Протокол POP3

Post Office Protocol (POP) - протокол доставки почты пользователю из почтового его ящика своего почтового сервера РОР. Когда почта пришла на сервер (по SMTP), она раскладывается по почтовым ящикам. Чтобы забрать почту из ящика нужен POP.

Первый стандарт РОРЗ определен в RFC 1225 (Post Office Protocol-Version 3, J. Myers, M. Rose November 1994).

Последняя версия RFC1939 (J. Myers, M. Rose May 1996 )

Порт по умолчанию - 110.

Пользователь может получить доступ к РОР-серверу из любой точки доступа к Интернет.

 Модель протокола POP3

9-1

Модель протокола POP

 Принцип работы POP

В протоколе РОРЗ оговорены три стадии процесса получения почты:

  • авторизация

  • транзакция

  • обновление (завершение транзакции)

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

Ответ сервера может иметь два значения:

+OK - положительный ответ

-ERR - отрицательный

Если сервер содержит несколько строк, то последняя строка должна содержать "точку".

Обозначения:

"C" - клиент

"S" - сервер

 Авторизация пользователя

Команды авторизации:

USER - имя пользователя, оно является и идентификатором почтового ящика.

PASS - пароль пользователя

APOP - авторизация цифровой подписью (используется редко).

Пример авторизации:


C: USER Pety // Пользователь сообщает свое имя, оно является идентификатором почтового ящика
S: +ОК // Сервер сообщает, что все в порядке
C: PASS Petypasw // Пользователь сообщает свой пароль
S: +ОК Pety's maildrop has 2 messages (320 octets) // Сервер сообщает, в почтовом ящике Pety есть 2 сообщения

Пример неудачной авторизации:


C: USER Pety
S: -ERR sorry, no mailbox for Pety here

Пример авторизации с цифровой подписью:


C: APOP Pety K3u7yG4TfR7gE55DD4ry6G4F // Имя и шифрованный пароль
S: +ОК Pety's maildrop has 2 messages (320 octets)

Транзакции РОРЗ

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

Команда STAT (просмотр ящика) возвращает количество сообщений и общее количество байтов в сообщениях:


C: STAT
S: +ОК 2 320 // 2 сообщения, общий размер 320 байт

Команда LIST (без параметра) возвращает список сообщений в почтовом ящике и их размеры:


C: LIST
S: +ОК 2 messages (320 octets)
S: 1 120 // 1 сообщение, размер 120 байт
S: 2 200 // 2 сообщение, размер 200 байт
S: .

Команда LIST с параметром (номер сообщения) возвращает информацию о заданном сообщении:


C: LIST 2
S: +ОК 2 200 ...
C: LIST 3 // запрос несуществующего сообщения
S: -ERR no such message, only 2 messages in maildrop // сообщение 3 отсутствует

Команда TOP возвращает заголовок, пустую строку и первые n строк тела сообщения:


C: TOP 1 10
S: +ОК
S: С новым годом
S:
S: <Десять строк сообщения>
S: .

Команда NOOP - проверка соединения:


C: NOOP
S: +ОК

Команда RETR извлекает сообщение с указанным номером и помещает его в буфер местного UA:


C: RETR 1
S: +OK 120 octets
S: <the POPS server sends the entire message here> // РОРЗ-сервер высылает сообщение целиком
S: . // "Точка" - конец сообщения

Команда DELE отмечает сообщение, которое нужно удалить:


C: DELE 1
S: +OK message 1 deleted // сообщение 1 удалено
C: DELE 2
S: -ERR message 2 already deleted // сообщение 2 уже удалено

Команда RSET снимает метки удаления со всех отмеченных ранее сообщений:


C: RSET
S: +OK maildrop has 2 messages (320 octets) // в почтовом ящике 2 сообщения были на удаление

Команда QUIT - переход в режим обновление (UPDATE):


C: QUIT
S: +OK dewey POP3 server signing off


C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)


C: QUIT
S: +OK dewey POP3 server signing off (2 messages left)

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

Обновление (UPDATE)

Происходит завершение транзакции. И удаление все помеченных сообщений.
 
 
  Пример работы POP3


S: <Ожидание соединения по порту 110>
C: <Клиент соединяется с сервером>
S: +OK POP3 server ready // приветствие сервера

C: USER Pety
S: +ОК
C: PASS Petypasw
S: +ОК Pety's maildrop has 2 messages (320 octets)
C: STAT
S: +ОК 2 320
C: LIST
S: +ОК 2 messages (320 octets)
S: 1 120  
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: <Текст первого письма>
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S: <Текст второго письма>
S: .
C: DELE 2
S: +OK message 2 deleted
C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)
C: <Клиент закрывает соединие с сервером>
S: <Ожидание соединения по порту 110>

 Просмотр сообщений на POP3 сервере с помощью Telnet

Получим письмо через Telnet.

Клиенту необходимо ввести следующие строки:


USER bogomolov
PASS *************
STAT
LIST
RETR 1

Подключение и получение письма telnet'ом (UNIX) с сервера POP (Дионис)

9-2

 Протокол IMAP

Протокол IMAP4 (Internet Message Access Protocol) позволяет клиентам получать доступ и манипулировать сообщениями электронной почты на сервере. Был разработан для замены POP3.

Порт по умолчанию - 143.

В отличии от POP3 позволяет клиенту манипулировать сообщениями на сервере.

Первый предложенный стандарт - RFC1730 (J. Myers December 1994)

Последний предложенный стандарт - RFC3501 (VERSION 4rev1 M. Crispin March 2003)

IMAP, как стандарт, пока не принят, он остается "предложенным стандартом"!!!

Но используется.

 Принцип работы IMAP

Каждая команда клиента начинается с идентификатора или тега команды, состоящую из букв и цифр, (например, А0001,А0002 и т. д.). Тег является уникальным идентификатором данной команды клиента. Ответы сервера или следующие команды клиента могут ссылаться на данную команду по ее тегу.

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

Взаимодействие клиента сервером не строится по принципу "запрос-ответ". Клиент может отправить новую команду на сервера не дожидаясь ответа на предыдущую.

Атрибуты сообщений

UID - уникальный идентификатор, присваивается каждому сообщению (не может меняться), 32 бита.

UIDVALIDITY - уникальный временный идентификатор в данной сессии

Порядковый номер - имеет каждое сообщение (может меняться).

Флаги:
"\Seen" - обозначает, что данное сообщение было прочитано
"\Answered" - на сообщение был дан ответ
"\Deleted" - сообщение помечено на удаление
"\Draft" - формирование данного сообщения еще не завершено
"\Recent" - сообщение "только что" поступило в почтовый ящик, т. е. данная сессия - первая, которая может прочитать это сообщение.

 Некоторые команды IMAP

LOGIN

Аргументом команды является строка с идентификатором (именем) и паролем клиента:


S: * OK IMAP4 revl Service Ready
С: a001 login Vasy pasword // посылка имени и пароля
S: a001OK LOGIN completed // идентификация прошла успешно

AUTHENTICAT

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


S: * OK KerberosV4 IMAP4revl Server
С: А001 AUTHENTICATE KERBEROS_V4
S: + AmFYig==
C: BAcAQrJ5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT
+nZIiriJjnTNHJUtxAA+oOKPKfHEcAFs9a3CL50ebe/ydHJUwYFd
WwuQlMWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKilQh
S: + or//EoAADZI=
C: DiAF5MgA+oOIALuBkAAmw==
S: A001 OK Kerberos V4 authentication successful

SELECT

После регистрации в системе клиент должен выбрать каталог (папку) сообщений, с которым он будет работать. Выбор каталога осуществляется командой SELECT. Аргументом команды является имя почтового каталога:


С: А142 SELECT INBOX // открытие каталога INBOX
S: * 172 EXISTS // В папке "INBOX" - 172 сообщения
S: * 1 RECENT // Из них одно только что поступившее
S: * OK [UNSEEN 12) Message 12 is first unseen // В папке есть непрочитанные сообщения, минимальный порядковый номер непрочитанного сообщения - 12
S: * OK [UIDVALIDITY 3857529045] UIDs valid // Уникальный временный идентификатор папки INBOX в данной сессии - 3857529045
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) // Сообщения в данной папке могут иметь флаги, указанные в строке FLAGS
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited // Клиент может менять у сообщений флаги "\Deleted" и "\Seen"
S: A142 OK [READ-WRITE] SELECT completed //
Клиент имеет права на запись и чтение сообщений из INBOX

EXAMINE

Если пользователю необходимо получить информацию о состоянии какого-либо каталога, достаточно воспользоваться командой EXAMINE с именем каталога в качестве аргумента команды, например:


С: А932 EXAMINE bloop
S: * 17 EXISTS
...

Команда EXAMINE возвращает те же параметры, что и команда SELECT, а отличается от команды SELECT только тем, что открывает заданный почтовый ящик исключительно на чтение.

STATUS

Если необходимо запросить статус какой-либо папки, не меняя текущий каталог, можно воспользоваться командой STATUS. В качестве параметров данной команде придаются: имя папки и тип запрашиваемой информации. В зависимости от указанного типа, команда может возвращать: количество сообщений в папке, количество новых сообщении количество непрочитанных сообщений, UIDVALIDITY каталога, UID следующего сообщения, которое будет добавлено в данную папку, например:


С: A042 STATUS blob (MESSAGES UNSEEN)
S: * STATUS blob (MESSAGES 231 UNSEEN 12)
S: A042 OK STATUS completed

LIST

Чтобы получить список папок (подкаталогов), находящихся в определенной папке и доступных клиенту, можно воспользоваться командой LIST. Аргументами команды являются: имя каталога, список подкаталогов который хотим получить (пустая строка - "" означает текущий каталог) и маска имен подкаталогов. Имена каталогов и маски имен подкаталогов могут интерпретироваться по-разному, в зависимости от реализации почтовой системы и структуры описания иерархии папок. Например, список папок, находящихся в корне, можно получить так:


С: А004 LIST "/" *
S: * LIST (\Noinferiors ) "/" INBOX
S: * LIST <\Noinferiors ) "/" OUTBOX
S: * LIST <\Noinferiors ) "/" WasteBox
S: A004 OK LIST completed

Ответ сервера содержит список папок в соответствии с их положением в иерархии и флаги данных папок (флаг "\Noinferiors" означает, что внутри данной папки нет, и не может быть построена иерархия).

FETCH

После получения информации на каталог, пользователь может прочитать любое сообщение или определенную группу сообщении, часть сообщения или определенные атрибуты сообщения. Для этого используется команда FETCH. Аргументами данной команды являются порядковый номер сообщения и критерии запроса. Критерии содержат описание вида возвращаемой информации. Например, можно запросить части заголовков или UID-сообщений в папке, или сообщения, имеющие или не имеющие определенные флаги. Так запрос заголовков сообщений, находящихся в INBOX с порядковыми номерами от 10 до 12, будет выглядеть так:


С: А654 FETCH 10:12 BODY [HEADER]
S: * 10 FETCH BODY [HEADER] {350}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDTl
S: From: raan@globe.com
S: Subject: Hi
S: To: imap@world.edu
S: Message-Id:
S^ mime-Vresion: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S: )
S: * 11 FETCH ....
S: * 12 FETCH ....
S: A654 OK FETCH completed

STORE

После просмотра сообщения, пользователь может сохранить его с другими флагами, добавить или удалить флаги сообщения ( пометить данное сообщение на удаление). Для этого используется команда STORE. Аргументами команды являются: номера сообщений, идентификатор операции и перечень флагов. Например, операция добавления флага удаления ("\Dеleted") трем сообщениям выглядит следующим образом:


С: АОО3 SТОRЕ 2:4 +FLAGS (\DELETED)
S: * 2 FETCH FLAGS (\Deleted \ Seen)
S: * 3 FETCH FLAGS (\Deleted )
S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen)
S: A003 OK STORE completed


Ответом на выполнение команды будут переданы строки новых флагов указанных сообщений.

SEARCH

Пользователь также может организовать поиск сообщений по определенным критериям. Для этого используется команда SEARCH. Например, поиск всех непрочитанных сообщений, поступивших от "smith" с 1-03-96 будет выглядеть так:


C: A282 SEARCH UNSEEN FROM 'Smith" SINCE 1-Mar-1996
S: * SEARCH 2 84 882
S: A282 OK SEARCH completed


Результатом поиска будут сообщения с последовательными номерами 2, 84 и 882.

APPEND

IMAP4 позволяет не только искать и читать сообщения в каталогах, этот протокол позволяет добавлять, копировать и перемещать сообщения в каталоги. Добавление сообщения в папку можно осуществить командой APPEND:


C: A003 APPENDSAVED-MESSAGES (\Seen) {310}
C: Date: Mon, 7 Feb 1997 21:52:25 - 0800 {PST}
C: From: Fred Foobar
C: Subject: aftenoon meeteng
C: TO: mooch@owatagu.siam.edu
C: Message-Id:
C: Mime-Version: 1.0
C: Content-Type: Text/PLAIN; CHARSET=US-ASCII
C:
C: Hello Joe, do you think we can meet at 3:30 tomorrow?
C:
S: A003 OK APPEND completed

COPY

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


C: A003 COPY 2:4 MEETENG
S: A003 OK COPY completed

 Пример работы IMAP4


S: * OK IMAP4 revl Service Ready
С: a001 login Vasy pasword
S: a001OK LOGIN completed

С: a002 SELECT INBOX
S: * 18 EXISTS
S: * 2 RECENT
S: * OK [UNSEEN 17) Message 17 is first unseen
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: a002 OK [READ-WRITE] SELECT completed

С: a003 FETCH 10:12 BODY [HEADER]
S: * 12 FETCH BODY [HEADER] {350}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDTl
S: From: raan@globe.com
S: Subject: Hi
S: To: imap@world.edu
S: Message-Id:
S^ mime-Vresion: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S: )
S: a003 OK FETCH completed

С: a004 SТОRЕ 12 +FLAGS (\DELETED)
S: * 12 FETCH FLAGS (\Deleted \ Seen)
S: A003 OK STORE completed

C: a005 logout
S: * BYE IMAP4rev1 server terminating connection
S: a005 OK LOGOUT completed

 Просмотр сообщений на IMAP4 сервере с помощью Telnet

Получим письмо через Telnet.

Клиенту необходимо ввести следующие строки:


a001 login bogomolov ***********
a002 select inbox
a004 fetch 1 rfc822.header

Подключение и получение заголовка письма telnet'ом (UNIX) с сервера IMAP4 (Дионис)

9-3

 

Last modified: Saturday, 2 March 2013, 10:22 PM