Протокол IMAP

 

 

Протокол IMAP4 (Internet Message Access Protocol) дозволяє клієнтам діставати доступ і маніпулювати повідомленнями електронної пошти на сервері. Був розроблений для заміни POP3.

Порт за замовчанням - 143.

У відмінності від POP3 - дозволяє клієнтові маніпулювати повідомленнями на сервері.

Перший запропонований стандарт - RFC1730 (J. Myers December 1994)

Останній запропонований стандарт - RFC3501 (VERSION 4rev1 M. Crispin March 2003)

IMAP, як стандарт, поки не прийнятий, він залишається "запропонованим стандартом"!

На сьогоднішній день цей протокол дуже інтенсивно використовується.

 

Переваги IMAP в порівнянні з POP3

 

IMAP був розроблений для заміни простішого протоколу POP3 і має наступні переваги в порівнянні з останнім:

• Листи зберігаються на сервері, а не на клієнті. Можливий доступ до однієї і тієї ж поштової скриньки з різних клієнтів. Підтримується також одночасний доступ декількох клієнтів. У протоколі є механізми, за допомогою яких клієнт може бути проінформований про зміни, зроблені іншими клієнтами.

• Підтримка декількох поштових скриньок (або коталогів). Клієнт може створювати, видаляти і перейменовувати поштові скриньки на сервері, а також переміщати листи з однієї поштової скриньки в іншу.

• Можливе створення загальних папок, до яких можуть мати доступ декілька користувачів.

• Інформація про стан листів зберігається на сервері і доступна всім клієнтам. Листи можуть бути помічені як прочитані, важливі і тому подібне.

• Підтримка пошуку на сервері. Немає необхідності викачувати з сервера безліч повідомлень для того, щоб знайти одне потрібне.

• Підтримка онлайн-роботи. Клієнт може підтримувати з сервером постійне з'єднання, при цьому сервер в реальному часі інформує клієнта про зміни в поштових скриньках, зокрема про нові листи.

• Передбачений механізм розширення можливостей протоколу.

 

Поточна версія протоколу має позначення Imap4rev1 (IMAP, версія 4, ревізія 1). Протокол підтримує передачу пароля користувача в зашифрованому вигляді. Крім того, IMAP-трафік можна зашифрувати за допомогою SSL.

 

1 Принцип роботи IMAP

 

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

Рядки даних, передані з сервера у відповідь на команду клієнта, можуть не містити тег, а містити символ "*". Це означає, що вони є проміжними рядками потоку даних відповіді, а ідентифікатор їх команди міститься в останньому рядку потоку.

Взаємодія клієнта з сервером не будується за принципом "запит-відповідь".

Клієнт може відправити нову команду сервера не чекаючи відповіді на попередню.

 

2 Атрибути повідомлень

 

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

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

Порядковий номер - має кожне повідомлення (може мінятися).

Прапорці:

"\Seen" - означає, що дане повідомлення було прочитане

"\Answered" - на повідомлення було дано відповідь

"\Deleted" - повідомлення помічене на видалення

"\Draft" - формування даного повідомлення ще не завершене

"\Recent" - повідомлення "тільки що" надійшло в поштову скриньку, тобто дана сесія - перша, яка може прочитати це повідомлення.

 

3 Деякі команди IMAP

 

LOGIN

Аргументом команди є рядок з ідентифікатором (ім'ям) і паролем клієнта:

 

S: * OK IMAP4 revl Service Ready

С: a001 login Vasy pasword // відправка логіну та паролю

S: a001OK LOGIN completed // ідентифікація пройшла успішно

 

AUTHENTICATE

Команда 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 ) "/" WasteBox

S: A004 OK LIST completed

 

Відповідь сервера містить список каталогів відповідно до їх положення в ієрархії, прапори даних каталогів (прапор "\Noinferiors" означає, що усередині даної папки немає, і не може бути побудована ієрархія).

 

FETCH

Після отримання інформації про каталог, користувач може прочитати будь-яке повідомлення або певну групу повідомлень, частина повідомлення або певні атрибути повідомлення. Для цього використовується команда FETCH.

Аргументами даної команди є порядковий номер повідомлення і критерії запиту. Критерії містять опис виду поверненої інформації. Наприклад, можна запитати частини заголовків або UID-повідомлень в теці, або повідомлення, що мають або не мають певні прапорці.

 

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