Лекция 9 - Электронная почта. Протоколы POP3, IMAP 4

advertisement
Лекция 9 - Электронная почта. Протоколы POP3, IMAP
4.
Литература





Почтовый протокол POP3 Семенов Ю.А. (ГНЦ ИТЭФ)
Протокол Интернет для работы с сообщениями IMAP Семенов Ю.А. (ГНЦ ИТЭФ)
Администрирование сети и сервисов INTERNET П. Б. Храмцов
Организация и администрирование почтовых и файловых серверов Internet, П.Б.
Храмцов.
Протокол POP3
9.1 Протокол 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.
Пользователь может получить доступ к РОР-серверу из любой точки доступа к Интернет.
9.1.1 Модель протокола POP3
Модель протокола POP
9.1.2 Принцип работы POP
В протоколе РОРЗ оговорены три стадии процесса получения почты:


авторизация
транзакция

обновление (завершение транзакции)
После того как сервер и клиент РОРЗ установили соединение, начинается стадия
авторизации. На стадии авторизации клиент идентифицирует себя для сервера. Если
авторизация прошла успешно, сервер открывает почтовый ящик клиента и начинается
стадия транзакции. В ней клиент либо запрашивает у сервера информацию (например,
список почтовых сообщений), либо просит его совершить определенное действие
(например, выдать почтовое сообщение). Наконец, на стадии обновления сеанс связи
заканчивается.
Ответ сервера может иметь два значения:
+OK - положительный ответ
-ERR - отрицательный
Если сервер содержит несколько строк, то последняя строка должна содержать "точку".
Обозначения:
"C" - клиент
"S" - сервер
9.1.2.1 Авторизация пользователя
Команды авторизации:
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)
9.1.2.2 Транзакции РОРЗ
После того как стадия авторизации окончена, обмен переходит на стадию транзакции. В
следующих примерах демонстрируется возможный обмен сообщениями на этой стадии.
Команда 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, и все
отмеченные для удаления сообщения будут восстановлены.
9.1.2.3 Обновление (UPDATE)
Происходит завершение транзакции. И удаление все помеченных сообщений.
9.1.3 Пример работы 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>
9.1.4 Просмотр сообщений на 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, как стандарт, пока не принят, он остается "предложенным стандартом"!!!
Но используется.
9.2.1 Принцип работы IMAP
Каждая команда клиента начинается с идентификатора или тега команды, состоящую из
букв и цифр, (например, А0001,А0002 и т. д.). Тег является уникальным идентификатором
данной команды клиента. Ответы сервера или следующие команды клиента могут
ссылаться на данную команду по ее тегу.
Строки данных, передаваемые с сервера в ответ на команду клиента, могут не содержать
тег, а содержать символ "*". Это означает, что они являются промежуточными строками
потока данных ответа, а идентификатор их команды содержится в последней строке
потока.
Взаимодействие клиента сервером не строится по принципу "запрос-ответ". Клиент
может отправить новую команду на сервера не дожидаясь ответа на предыдущую.
9.2.2 Атрибуты сообщений
UID - уникальный идентификатор, присваивается каждому сообщению (не может
меняться), 32 бита.
UIDVALIDITY - уникальный временный идентификатор в данной сессии
Порядковый номер - имеет каждое сообщение (может меняться).
Флаги:
"\Seen" - обозначает, что данное сообщение было прочитано
"\Answered" - на сообщение был дан ответ
"\Deleted" - сообщение помечено на удаление
"\Draft" - формирование данного сообщения еще не завершено
"\Recent" - сообщение "только что" поступило в почтовый ящик, т. е. данная сессия первая, которая может прочитать это сообщение.
9.2.3 Некоторые команды 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
9.2.4 Пример работы 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
9.2.5 Просмотр сообщений на IMAP4 сервере с помощью Telnet
Получим письмо через Telnet.
Клиенту необходимо ввести следующие строки:
a001 login bogomolov ***********
a002 select inbox
a004 fetch 1 rfc822.header
Подключение и получение заголовка письма telnet'ом (UNIX) с сервера IMAP4 (Дионис)
Download