Imap айті бубон

Telnet і MTA. Тестування поштових серверів за допомогою telnet.

OpenSSL і MTA. Тестування поштових серверів з використанням зашифрованого з'єднання.

Протокол IMAP (Internet Mail Access Protocol) описується в RFC 2060.

Як і POP3. протокол IMAP використовує концепцію клієнт-сервер з набором команд. За допомогою команд здійснюється передача повідомлень електронної пошти від сервера клієнту. Клієнт встановлює для цієї мети TCP-з'єднання з портом 143 на сервері. Далі сервер повинен відповісти спеціальним повідомленням-запрошенням.

У рядку 1 показана команда на відкриття сеансу за допомогою telnet з портом 143 (порт IMAP за замовчуванням). Рядок 5 відображає запрошення, видане сервером IMAP. У рядку 6 клієнтом задана команда закінчити сеанс з сервером. Потім сервер посилає повідомлення про закінчення сеансу (рядок 7) та закриває з'єднання з клієнтом.

Кожна команда, яка видається клієнтом, передує унікальним ідентифікатором. Сервер може потім використовувати цей ідентифікатор в своїх відповідях, що дозволяє клієнту визначити, до якої команді належить відповідь сервера. Це особливо важливо при виконанні сервером декількох команд за сеанс. Ідентифікатор зазвичай являє собою коротку рядок алфавітно-цифрових символів, яка генерується клієнтом. Так, в рядку 6 лістингу 7.1 клієнтом був обраний ідентифікатор a001. Якби клієнту треба було ставити й інші команди, то наступним ідентифікатором був би a002 і т.д. Часто для спрощення ідентифікатори команд протягом сеансу IMAP просто послідовно збільшують один зі своїх розрядів.

Методи перевірки автентичності користувача в IMAP

Так само як і в протоколі POP3, в IMAP є кілька методів перевірки автентичності клієнта. Деякі з них забезпечують більший рівень безпеки, в порівнянні з іншими. На відміну від клієнтів POP3, клієнти IMAP часто проводять досить тривалі сеанси з сервером при обробці повідомлень. Таким чином, ім'я користувача та пароль не передаються по мережі кілька разів на годину, як це зазвичай відбувається при роботі по протоколу POP3.

команда LOGIN

Команда LOGIN дозволяє клієнту при реєстрації на сервері IMAP використовувати ім'я користувача та пароль у звичайному текстовому вигляді.

команда AUTHENTICATE

За допомогою команди AUTHENTICATE клієнт може використовувати при реєстрації на сервері IMAP альтернативні методи перевірки автентичності. Індивідуальна перевірка справжності користувачів не є обов'язковою і підтримується не всіма серверами IMAP. До того ж реалізації такої перевірки можуть відрізнятися в залежності від сервера. Коли клієнт видає команду AUTHENTICATE, сервер відповідає на неї рядком виклику в кодуванні base64. Далі в обов'язки клієнта входить відповідь на виклик сервера про перевірку справжності, також закодований base64. Якщо на сервері не підтримує метод перевірки автентичності, запропонований клієнтом, він включає в свій відповідь негативне слово NO. Після цього клієнт повинен продовжити переговори по узгодженню методу перевірки автентичності. Якщо всі спроби визначити метод перевірки автентичності зазнали невдачі, то клієнт робить спробу зареєструватися на сервері за допомогою команди LOGIN. Приклад сеансу з застосуванням AUTHENTICATE:

У рядках 6-9 показані спроби клієнта узгодити з сервером IMAP метод перевірки автентичності. Як бачите, всі вони не увінчалися успіхом. А в рядку 10 показано, що метод перевірки, прийнятний і для клієнта, і для сервера, знайдений. Відповідаючи, сервер в рядку 11 видає кодовану рядок з викликом в кодуванні base64. Однак в рядку 12 клієнт відкидає спробу реєстрації і відновлює її лише в рядку 14 за допомогою команди LOGIN.

Клієнтська частина протоколу IMAP

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

Поштова скринька для клієнта за замовчуванням носить назву INBOX. Всі нові повідомлення лягають саме в INBOX. Клієнт має можливість створювати нові поштові скриньки (іноді звані в програмах-клієнтах для роботи з електронною поштою папками). Туди з метою впорядкування він може переміщати повідомлення з папки INBOX.

Кожному з повідомленням призначається унікальний ідентифікатор (UID), за яким вони ідентифікуються в поштовій скриньці. Мітка UID зберігається протягом усіх сеансів IMAP для того, щоб клієнтське програмне забезпечення могло правильно ідентифікувати повідомлення в поштовій скриньці. Кожному поштової скриньки відповідає унікальний ідентифікатор достовірності (UIDVALIDITY). Мітка UIDVALIDITY має бути присутня під час усіх сеансів IMAP, тільки в тому випадку, якщо ідентифікатори повідомлень в ящику залишалися незмінними. Якщо в поштовій скриньці є повідомлення з різними ідентифікаторами, то значення UIDVALIDITY при наступному сеансі має збільшитися. Це дозволяє клієнтам швидко визначати, чи з'явилися в поштовій скриньці нові повідомлення з моменту останнього до нього звернення.

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

Прапори поштового повідомлення IMAP

Поштового повідомлення може відповідати 0 прапорів або кілька прапорів. Інформація про прапори передається клієнту разом з самим повідомленням. В обов'язки клієнта входить інтерпретація прапорів відповідним чином.

У наступному розділі описуються команди IMAP, які клієнт може задавати сервера.

Хоча, згідно RFC. команди IMAP набираються великими літерами, більшість серверів IMAP сприймає команди, задані як великими, так і прописними буквами.

Сервер повинен відповідати відповідним чином на задані команди або відповідати негативно, якщо команда задана неправильно або не підтримується.

команда SELECT

Команда SELECT використовується, лише коли поштовий ящик активний. За замовчуванням, поки клієнт не зареєстрований в системі, жоден з належних йому поштових скриньок не є обраним. Далі клієнт повинен вибрати поштову скриньку, з яким він збирається працювати. Зазвичай перший ящик, який обирається клієнтом, - це ящик INBOX, куди поміщаються нові повідомлення. Формат команди SELECT наступний:

Тут mailbox - це назва поштової скриньки, до якого звертається клієнт. Під час одного сеансу IMAP може бути активний тільки один поштовий ящик. Якщо ящик існує і у клієнта є відповідний доступ до нього, то сервер дає багатостроковий відповідь, де описується стан поштової скриньки.

команда CREATE

Команда CREATE використовується для створення нової поштової скриньки на сервері IMAP. Ім'я та місце розташування нових поштових скриньок визначаються відповідно до загальних специфікаціями ОС Linux. У робочому каталозі користувача створюється новий поштовий ящик з ім'ям, але без завдання розташування, так як воно відомо каталогу $ HOME клієнта. Наприклад, якщо робочий каталог клієнта знаходиться в / home / riley і клієнт задає команду CREATE для створення нової поштової скриньки stuff / junk, то новостворений ящик на поштовому сервері під керуванням ОС Linux матиме шлях / home / riley / stuff / junk. У цьому прикладі ви бачите, як використовується знак роздільник /. Однак це не є загальним для всіх серверів IMAP.

Деякі програми IMAP-клієнти використовують термін папка по відношенню до нових поштових скриньок. Багато з них дозволяють користувачам також створювати їх з певним рівнем вкладеності, так що будьте обережні при створенні нових папок (поштових скриньок). З ростом довжини шляху до поштової скриньки стає все важче обслуговувати його.

команда DELETE

Команда DELETE застосовується до поштових скриньок, а не до повідомлень. Сервер IMAP при отриманні цієї команди спробує видалити поштову скриньку з ім'ям, зазначеним в якості аргументу команди. В аргументі команди можна використовувати стандартне опис шляхів ОС Linux, зі знаком роздільник /, якщо тільки вони не знаходяться в каталозі $ HOME. Повідомлення з віддалених поштових скриньок відновленню не підлягають і губляться разом з ящиками.

команда RENAME

За допомогою команди RENAME клієнт може змінити ім'я поштової скриньки. При цьому можливе застосування двох параметрів. Перший параметр - власне ім'я поштової скриньки, який потрібно перейменувати. І другий параметр - нове ім'я поштової скриньки.

Перейменування не впливає на вміст поштової скриньки.

команда LIST

Команда LIST використовується для отримання списку всіх поштових скриньок клієнта. З нею використовуються два параметри. Формат команди LIST наведено нижче:

команда LSUB

команда APPEND

команда CHECK

Команда CHECK використовується для установки контрольної точки в поштовій скриньці. Будь-які операції, такі, наприклад, як запис даних з пам'яті сервера на його жорсткий диск, повинні виконуватися при відповідному стані поштової скриньки. Саме для перевірки цілісності поштової скриньки після дискових та інших подібних їм операцій і застосовується команда CHECK. Ця команда використовується без параметрів.

команда CLOSE

Команда CLOSE повністю відповідає своїй назві - вона закриває поштову скриньку.

Коли поштову скриньку закритий, то всі повідомлення, помічені прапором \ DELETED, фізично видаляються з нього.

Дія команди CLOSE чітко простежується на щойно відкритому новому поштовій скриньці. Відкритий поштову скриньку закривається також за допомогою команди LOGOUT. Команда CLOSE не має параметрів.

команда EXPUNGE

Команда EXPUNGE використовується для видалення з поштової скриньки всіх повідомлень, позначених прапором \ DELETED, при цьому поштовий ящик не закривається.

Відповідь сервера на команду EXPUNGE є звіт про новий стан поштової скриньки.

У рядку 8 користувач alex вибирає поштову скриньку з ім'ям newbox. Рядки 9-16 являють собою відповідь сервера з інформацією щодо обраного поштової скриньки. Рядок 9 говорить про те, що в ньому знаходиться 6 повідомлень. У рядках 17 і 20 користувач alex скористався командою STORE, щоб помітити два повідомлення як віддалені (\ DELETED). Потім в рядку 23 користувач alex видає команду STATUS. З рядка 24 можна зробити висновок, що, з точки зору сервера IMAP, в поштовій скриньці все ще знаходяться шість повідомлень, хоча два з них позначені як віддалені. У рядку 26 користувач видає команду EXPUNGE, по якій повідомлення, помічені як видалені, стираються. Відповідь сервера в рядках 27-31 підтверджує, що повідомлення було видалено з ящика і в ньому залишилося чотири повідомлення. Це ж підтверджує і команда STATUS, задана в рядку 32. На неї сервер відповідає, що в поштовій скриньці тепер тільки чотири повідомлення.

команда SEARCH

Команда SEARCH є одним з найбільш потужних засобів з арсеналу IMAP. За допомогою цієї команди проводиться пошук повідомлень за критеріями в активному поштовій скриньці а потім відображає результати у вигляді номера повідомлення. Формат команди SEARCH наступний:

Тут CHARSET specification складається з службового слова CHARSET, за яким іде позначення набору символів. Набір символів за замовчуванням - ASCII. так що, як правило, цей параметр опускається. Параметр search criteria визначає ключові критерії пошуку і їх значення. Критерії пошуку описані в табл. 7.3.

Таблиця. Критерії пошуку для команди SEARCH

Як видно з таблиці існує величезна кількість критеріїв пошуку повідомлень. Це дуже зручно, коли потрібно знайти специфічне повідомлення в поштових скриньках, які заповнені великою кількістю повідомлень. Нижче представлений короткий приклад з використанням команди SEARCH.

У рядках 17, 20 і 23 показані приклади використання команди SEARCH. Рядки 18, 21 і 24 є відповідями сервера IMAP на команду SEARCH. У відповіді містяться номери повідомлень, які відповідають критерію пошуку. Якщо відповідностей, не знайдено, то сервер повертає слово SEARCH без ідентифікатора повідомлення UID.

команда FETCH

Команда FETCH використовується для отримання тексту поштового повідомлення. Вона застосовується тільки для відображення повідомлень. На відміну від POP3, клієнт IMAP не зберігається копію повідомлення на клієнтському ПК.

команда STORE

Команда STORE застосовується для зміни інформації про повідомленні. Формат команди наступний:

аргумент задає діапазон номерів повідомлень, до яких застосовується команда STORE. В даний час для цієї команди визначено тільки два типи даних (). Тип FLAGS визначає набір прапорів, встановлених для повідомлення. Тип FLAGS.SILENT також визначає набір прапорів, встановлених для повідомлення, але при цьому сервер IMAP не повертає їх нове значення в своїй відповіді.

Поведінкою цих типів даних можна управляти, задавши перед ними знак плюс (+) або мінус (-). Знак плюс означає, що значення типу даних () Буде додано до повідомлення, мінус - що воно буде видалено з повідомлення.

У рядку 18 цього лістингу показано, як встановлюється прапор \ DELETED для повідомлення в активному поштовій скриньці з номером 1. Зверніть увагу, що перед прапором заданий знак плюс (+). Можна було б також поставити прапор (-). Тоді прапор \ DELETED був би скасований для повідомлення (один із способів відновити видалене повідомлення до того, як наберуть чинності контрольні точки сполучення).

Повідомлення, позначене прапором \ DELETED, не видаляється фізично з поштової скриньки до виконання команд за призначенням нових контрольних точок для поштової скриньки. А це робиться за допомогою команд CHECK, EXPUNGE, SELECT або LOGOUT.

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

команда CAPABILITY

За допомогою команди CAPABILITY клієнт може запитувати у сервера IMAP інформацію про його можливості.

команда NOOP

Дії команди NOOP, як ми знаємо, відповідає її назві, тобто вона нічого не робить. Вона може застосовуватися для підтримки активності під час сеансу для того, щоб сеанс не припинився за таймером інтервалу очікування. Відповідь сервера на команду NOOP завжди повинен бути позитивним. Так як сервер часто у відповіді повертає стан виконання тієї чи іншої команди, то NOOP цілком можна використовувати як тригер для періодичного запиту про стан сервера. Якщо щось сталося з поштовою скринькою під час періоду очікування, наприклад сервер видалив повідомлення згідно з правилами, встановленими для поштової скриньки адміністратором поштової системи, то у відповідь на команду NOOP буде повернута оновлена ​​інформація про його стан.

команда LOGOUT

Команда LOGOUT використовується для завершення сеансу для поточного ідентифікатора користувача і завершити всі активні поштових скриньок. Якщо будь-які повідомлення були помічені прапором \ DELETED, то за допомогою цієї команди вони будуть фізично видалені з поштової скриньки.