Материал: Лабораторная работа 8 (факультативно)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторная работа № 8

Прием почтовых сообщений по протоколу IMAP

8.1. Цель работы:

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

8.2. Задание на лабораторную работу:

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

8.3. Методические указания по протоколу IMAP:

IMAP (Internet Message Access Protocol) – протокол прикладного уровня,

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

IMAP4rev1, описана в RFC 2060.

8.3.1. Транспортный уровень

IMAP использует протокол TCP в качестве транспортного уровня. В стандартной реализации прослушивается порт 143, который принимает незащищённые(нешифрованные) соединения. В связи с повышением уровня безопасности и доступа к личной информации многие почтовые сервера отказались использовать небезопасные(нешифрованные) соединения, поэтому для приёма безопасных(шифрованных) соединений сейчас используется порт 993. Таймаут, при котором сервер разорвёт соединение в связи с бездействием клиента, 30 минут.

8.3.2. Структура сообщений IMAP

Каждое сообщение протокола IMAP имеет стандартизованную структуру. Клиент начинает взаимодействие с сервером, отправляя команду с определённым запросом на сервер. Все команды должны начинаться с некого идентификатора(тэга), имеющего следующую структуру: заглавная буква латинского алфавита и 3 цифры, пример A001 или B992. Данный идентификатор генерируется для каждой команды со стороны клиента, он необходим так как использование IP сети не гарантирует постоянный уровень задержки, поэтому ответ на запрос, который был сделан позднее, может прийти раньше и для точной идентификации этих ответов необходим уникальный тэг. Сервер отвечает на запрос посылая этот же тэг. Кроме запросов и ответов используются отклики, которые несут в себе запрашиваемую информацию.

Пример сообщения:

//Запрос с уникальным идентификатором

A002 Select inBox

//Отклик с информацией о выбранном почтовом ящике

* FLAGS (\Answered \Seen \Draft \Deleted $Forwarded) * 25 EXISTS

* 24 RECENT

* OK [PERMANENTFLAGS (\Answered \Seen \Draft \Flagged \Deleted $Forwarded \*)] Limited

* OK [UIDNEXT 53] Ok

* OK [UIDVALIDITY 1418574115] Ok

//Ответ с этим же идентификатором

A002 OK [READ-WRITE] Select Completed.

8.3.3. Нумерация почтовых сообщений

Каждое сообщение в почтовом ящике имеет порядковый и уникальный номер(UID). Порядковый номер меняется в течении сеанса, например, при удалении первого сообщения в ящике номера всех последующих изменяется на 1 и второе сообщение становиться первым. Уникальный 32-битный номер сообщения используется вместе с уникальным 32-битный номером почтового

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

8.3.4. Флаги почтовых сообщений

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

Таблица 8.1

 

Флаги почтовых сообщений

 

 

Флаг

Описание

\Seen

Сообщение прочитано

\Answered

Был отправлен ответ на данное сообщение

\Flagged

Сообщение отмечено как важное

\Deleted

Сообщение удалено

\Draft

Сообщение помечено как черновик

\Recent

Сообщение получено

 

 

8.3.5. Состояния сервера и команды

Каждая команда требует определённого состояния сервера. Существуют 4 состояния сервера:

1)Аутентификация не произведена – состояние, в котором находиться сервер сразу после успешного соединения.

2)Аутентификация произведена – состояния, поле успешной аутентификации, в котором клиенту доступны манипуляции с почтовыми ящиками

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

4)Завершение соединения – состояние, в котором сервер разрывает соединение.

Рисунок 8.1 Диаграмма состояний сервера

На рисунке 8.1 изображена диаграмма состояний сервера, переход между состояниями:

1.Приветствие без предварительной аутентификации

2.Соединение с предварительной аутентификацией

3.Сервер сбросил соединение

4.Аутентификация (LOGIN или AUTHENTICATE)

5.Выбор почтового ящика (SELECT или EXAMINE)

6.Возврат к выбору почтового ящика (CLOSE)

7.Завершение соединения, инициированное клиентом (LOGOUT)

8.3.6. Именование почтовых ящиков и иерархия имён

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

Для лучшего понимания такой структуры приведём пример. Допустим, имеется почтовые ящики newMailBox и Group, при этом в почтовом ящике Group содержаться ещё 2 вложенных почтовых ящика Bonch и Work. Воспользуемся командой List для просмотра имеющихся почтовых ящиков.

A002 List "" "*"

* List (\Unmarked \HasNoChildren \Sent) "|" "&BB4EQgQ,BEAEMAQyBsENQQ9BD0ESwQl-"

*List (\Unmarked \HasNoChildren) "|" "&BBgEQQRFBD4ENARPBEkEOAQ1-"

*List (\Unmarked \HasNoChildren \Junk) "|" "&BCEEPwQwBDw-"

*List (\Unmarked \HasNoChildren \Trash) "|" "&BCMENAQwBDsENQQ9BD0ESwQ1-"

*List (\Unmarked \HasNoChildren \Drafts) "|" "&BCcENQRABD0EPgQyBDgEOgQ4-"

*List (\Unmarked \HasChildren) "|" Group

*List (\Unmarked \HasNoChildren) "|" "Group|Bonch"

*List (\Unmarked \HasNoChildren) "|" "Group|Work"

*List (\Marked \NoInferiors) "|" INBOX

*List (\Unmarked \HasNoChildren) "|" newMailBox

A002 OK List Completed.

List вернула нам список всех имеющихся почтовых ящиков, в список которых входят имеющиеся у нас почтовые ящики, а также зарезервированные почтовым сервером(стандартные. Символ "|" является разделителем уровня иерархии.

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

Вследующих таблицах (8.2 – 8.7) приведены базовые команды протокола IMAP, описанные в RFC 2060.

Источник: https://studfile.net/preview/16499907/