Выбрать главу

Большинство поставщиков бесплатных сетевых услуг не поддерживают протокола IMAP4. Поэтому, найти такой сервер, для многих окажется не легкой задачей. Неплохой идеей будет набрать в строке запроса поисковой системы (такой, как «Апорт») нечто вроде «IMAP4+free»

 

Неплохо себя зарекомендовала бесплатная служба “Mailru.com”, предоставляющая быстрый и бессбойный доступ к почтовому ящику по протоколам POP3, STMP, IMAP4.

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

Для начала работы необходимо установить TCP-соединение через сто сорок третий порт.

Подключение к mail.softclub.net

Через секунду после установления соединения, на экране telnet-клиента появится приглашение следующего вида:

· OK joshua.softclub.net IMAP4rev1 v12.250 server ready

Сразу же после его выдачи сервер переходит в состояние аутентификации. Передать свое имя и пароль клиент может двумя способами: либо воспользоваться командой “login” и послать их по сети в открытом виде (как чаще всего и происходит), либо выбрать защищенный режим, воспользовавшись командой “authenticate”, которая передает шифрованный пароль. Здесь не приводится анализ уязвимости тех или иных алгоритмов шифрования паролей и их реализаций. В общем случае все они достаточно надежны, а ошибки конкретных реализаций всегда можно найти на любом сайте, посвященном сетевой безопасности.

В приведенном ниже примере для входа на сервер используется команда “login”, следом за которой идут имя и пароль пользователя, разделенные пробелом:

· kpnc login kpnc MyPassword

· kpnc OK LOGIN completed

Ответ сервера состоит из трех частей: возращенного тега “kpnc” [196], ключевого слова “OK”, подтверждающего успешное завершение операции (в противном случае было бы “BAD”), и осмысленной текстовой строки (“LOGIN completed”).

С момента подтверждения пароля доступ к почтовому ящику открыт. Но прежде, чем приступить к чтению поступившей корреспонденции, необходимо понять, как она храниться на сервере. Конечно же, в папках, ибо в современной компьютерной терминологии папкой называется все, способное вмещать в себя что-то еще [197] Название и содержимое папок определяется самим пользователем, но в любой системе обязательно присутствует папка “INBOX”, в которую помещается поступающая корреспонденция.

Для выбора папки предусмотрена команда “SELECT”, использование которой продемонстрировано в следующем примере:

· kpnc SELECT INBOX · * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) · * OK [PERMANENTFLAGS(\Answered\Flagged\Draft\Deleted\Seen \*)] · * 1 EXISTS · * 1 RECENT · * OK [UNSEEN 1] · * OK [UIDVALIDITY 954332839] · kpnc OK [READ-WRITE] Completed

Значок звездочки указывает на неразрывность информационного потока. До тех пор, пока в начале строки не встретится возращенный тег, никто не должен вклиниваться в процесс передачи.

За ключевым словом “FLAGS” (порядок которого в ответе произволен) перечисляются все доступные флаги для сообщений данной папки. Назначение их такого:

· Answered: на сообщение был отправлен ответ

· Flagged: сообщение имеет флаг (отмечено «галочкой»)

· Draft: незавершенное сообщение (черновик)

· Deleted: сообщение помечено как удаленное, но еще физически не удалено

· Seen: сообщение уже было прочитано

· Recent: только что полученное сообщение [198]

Следующее ключевое слово “PERMANENTFLAGS” показывает, какие флаги сообщений может менять пользователь, где знак «*» (джокер) обозначает «все флаги».

Две строки, расположенные ниже, говорят о том, что в ящике содержится всего одно письмо, которое было только что получено. «Только что» следует трактовать как «в промежутке между двумя последними сессиями».

Сообщение “UNSEEN 1” входит в перечень необязательных для реализации и подсчитывает количество непрочитанных писем. В приведенном примере имеется только одно такое письмо.

Уникальный временной идентификатор папки, следующий за “UIDVALIDITY”, может использоваться взамен ее имени и варьируется от сессии к сессии.

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

Следующий эксперимент демонстрирует технику чтения сообщений. В отличие от POP3, такую, казалось бы, простую операцию выполнить весьма затруднительно. Тогда как POP3 допускает лишь одну возможность - получение всего сообщения целиком, протокол IMAP4 помимо номера выбранного сообщения требует указание критерия запроса!

Полное описание синтаксиса запроса содержится в RFC-1730, с котором настоятельно рекомендуется ознакомиться, но здесь привести даже в общих чертах не представляется возможным.

Сообщение может быть прочитано различными способами, один из которых продемонстрирован ниже. Он заключается в вызове команды “FETCH” с параметрами, обсуждение которых выходит за рамки данной книги, но может быть почерпнуто из RFC-1730.

В простейшем случае для получения заголовка сообщения необходимо перейти в папку, в которой хранится это сообщение (для этого используется команда “SELECT”) и отправить серверу следующий запрос “FETCH msg BODY[HEADER]”, где “msg” порядковый номер требуемого сообщения.

Например, это может выглядеть так:

· kpnc SELECT INBOX · kpnc FETCH 1 BODY[HEADER] · 1 FETCH (FLAGS (\Recent \Seen) BODY[HEADER] {1032} · Return-Path: «kpnc@aport.ru» · Received: from msk2.mail.ru (mx2.mail.ru [194.67.23.33]) · by mx1.mailru.com (8.10.0/8.10.0.Beta10) with ESMTP id e2TCbfd35173 · for «kpnc@mailru.com»; Wed, 29 Mar 2000 16:37:41 +0400 (MSD) · Received: from camel.int ([10.0.0.98] helo=camel.mail.ru) · by msk2.mail.ru with esmtp (Exim 3.02 #116) · id 12aHjy-0000Dk-00 · for kpnc@mailru.com; Wed, 29 Mar 2000 16:38:30 +0400 · Received: from ppp-02.krintel.ru ([195.161.41.226] helo=KPNC) · by camel.mail.ru with smtp (Exim 3.02 #107) · id 12aHje-0002OB-00 · for kpnc@mailru.com; Wed, 29 Mar 2000 16:38:12 +0400 · Message-ID: «006801bf997a$e6e39e80$f429a1c3@KRINTEL.RU» · From: =?koi8-r?B?69LJ0yDrwdPQxdLTy8k=?= «kpnc@aport.ru» · To: «kpnc@mailru.com» · Subject: Test · Date: Wed, 29 Mar 2000 16:31:32 +0400 · MIME-Version: 1.0 · Content-Type: text/plain; · charset="koi8-r" · Content-Transfer-Encoding: 7bit · X-Priority: 3 · X-MSMail-Priority: Normal · X-Mailer: Microsoft Outlook Express 5.00.2417.2000 · X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300 ·) · kpnc OK Completed А текст письма можно получить, воспользовавшись запросом “FETCH msg BODY[TEXT]”. Например: · kpnc FETCH 1 BODY[TEXT] · 1 FETCH (BODY[TEXT] {16} · Hello, KPNC! · ·) · kpnc OK Completed

Остальные команды протокола IMAP4 здесь рассматриваться не будут, но могут быть найдены в технической документации RFC-1730, RFC-2060 и RFC-2062.

Дополнение. Почтовый сервер изнутри

O В этой главе:

O Краткая история возникновения почтальона SendMail

O Архитектура SendMail

O Компоненты SendMail - User Agent, Transfer Agent, Delivery Agent