Почтовые службы на разных машинах представляют сообщения в разных форматах, некоторые из них несовместимы. Тем не менее, большинство систем во всем мире понимают формат сообщения, называемый, по имени документа, в котором он описан, например формат почтового сообщения Internet определен в документе RFC-822 (Standard for ARPA Internet Text Message).
Первоначально этот стандарт был разработан для сети Internet, но сейчас принят во многих других сетях. Это довольно большой документ объемом в 47 страниц машинописного текста, поэтому рассмотрим формат сообщения на примерах.
Почтовое сообщение состоит из трех частей: конверта, заголовка и тела сообщения. Пользователь видит только заголовок и тело сообщения. Конверт используется только программами доставки. Заголовок всегда находится перед телом сообщения и отделен от него пустой строкойи содержит несколько строчек необходимой информации об этом сообщении: дату отправления, адрес, обратный адрес, тему сообщения, и другие.
RFC-822 регламентирует содержание заголовка сообщения. Заголовок состоит из полей. Поля состоят из имени поля и содержания поля. Имя поля отделено от содержания символом «:».
В документе RFC-822 открыто, сказано, что пользователям разрешается изобретать собственные заголовки для своих нужд при условии, что эти заголовки начинаются со строки X-. Гарантируется, что в будущем никакие стандартные заголовки не будут начинаться с этих символов, чтобы избежать конфликтов между официальными и частными заголовками. Иногда умники-студенты включают поля вроде X-Fruit-of-the-day: (сегодняшний плод) или X-Disease-of-the-week: (недуг недели), использование которых вполне законно, хотя их смысл и не всегда понятен.
Минимально необходимыми являются поля Date, From и To, например:
• Date: Wed May 10 18:31:21 2007
• From: postcards@postcards.ok.kz
• To: Max@mail.ru
Поле Date определяет дату отправки сообщения, поле From - отправителя, а поле To – получателя (ей). Если письмо отослано по списку рассылки, то в поле To будет указан адрес почтового ящика, на который посылается текст письма для рассылки.
Письма по спискам рассылки идут довольно долго и могут запоздать на сутки и более. Бывает, что при ежедневной рассылке почты письмо за текущий день не приходит, а приходит оно после письма за следующий день. То есть, если письмо должно прийти 9-го числа, то может случиться, что оно придет 10-го, 11-го числа. Это обусловлено самой системой рассылки. Письмо может проходить через большое количество серверов и вследствие этого может опоздать. Также на это влияет и загруженность почтового сервера[12].
Чаще заголовок содержит дополнительные поля:
• Date: Tue May 9 12:21:18 2000
• From: ykovrizhnykh@online.kz
• Sender: admin@online.kz
• To: hetene@mail.ru
• Message-ID: <4231.629.XYzi-admin@online.kz>
В данном случае, поле Sender указывает, что владелец ящика ykovrizhnykh@online.kz не является автором сообщения. Он только переслал сообщение, которое получил от admin@online.kz. Поле Message-ID содержит уникальный идентификатор сообщения и используется программами доставки почты.
Следующее сообщение демонстрирует все возможные поля заголовка:
• Date: 16 Mon Feb 2000 16:53:33
• From: Ken Davis <Kdavis@This-Host.This.net>
• Subject: Re: The Syntax in the RFC
• Sender: KSecy@Other-host
• Reply-To: Sam.Irving@Reg.Organization
• To: hetene@mail.ru
• cc: Important folks
• Comment: New company launced.
• In-Reply-To: <some.string@DBM.Group>, George`s message
• Message-ID: <4331.629.XYzi-What@Other-Host
Поле Subject определяет ему сообщения, Reply-To - пользователя, которому отвечают, Comment - комментарий, In-Reply-To - показывает, что сообщение относится к типу «В ответ на Ваше сообщение, отвечающее на сообщение, отвечающее...».
Следует сказать, что формат сообщения постоянно дополняется и совершенствуется. В RFC-1327 введены дополнительные поля для совместимости с почтой протокола X.400. Кроме этого, следует обратить внимание на поля некоторых довольно часто встречающихся заголовков, которые не регламентированы в RFC-822.
Так, первое предложение заголовка, которое начинается со слова From, может содержать IMAP-путь сообщения, по которому можно определить, через какие машины сообщение «пробиралось». Поле Received: содержит транзитные адреса почтовых серверов с датой и временем прохождения сообщения. Вся эта информация полезна при разборе трудностей с доставкой почты.
Протоколы
Для работы в режиме обмена корреспонденции по ЭП необходимы специальные программы. Существуют два основных стандарта E-Mail:
• X.400, созданный International Telecommunications Union;
• SMTP, разработанный IETF (Internet Engineering Task Force).
Стандарт Х.400 отличается строгостью, жёсткой стандартизацией, наличием коммерческих операторов с гарантированным уровнем сервиса, поддержкой большого числа национальных кодировок. Этот стандарт в виду названных особенностей пользуется большой популярностью среди государственных организаций всего мира, при работе, в частности, по правительственным телекоммуникационным линиям.
SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
ESMTP (англ. Extended SMTP) — масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают SMTP и его расширения.
SMTP используется для отправки почты от пользователей к серверам и между серверами для дальнейшей пересылки к получателю. Коды ответов SMTP и их значения приведены в приложении 4.
Данные передаются при помощи TCP, при этом обычно используется порт 25 или 587. При передаче сообщений между серверами используется только порт 25. Ограничения на размеры объектов SMTP представлены в приложении 5.
Sendmail был одним из первых (если не первым) агентом отправки сообщений, который начал работать с SMTP. В настоящее время этот протокол является стандартным для электронной почты, и его используют все клиенты и серверы.
Протокол был разработан для передачи только текста в кодировке ASCII, кроме того, первые спецификации требовали обнуления старшего бита каждого передаваемого байта. Это не даёт возможности отсылать текст на национальных языках (например, кириллице), а также отправлять двоичные файлы. Для снятия этого ограничения был разработан стандарт MIME – (Multipurpose Internet Mail Extensions), который описывает способ преобразования двоичных файлов в текстовые. В настоящее время большинство серверов поддерживают 8BITMIME. Существующие типы и подтипы MIME представлены в приложении 6.
Сервер SMTP — это конечный автомат с внутренним состоянием. Клиент передает на сервер строку команда<пробел>параметры<перевод строки>/ Сервер отвечает на каждую команду строкой, содержащей код ответа и текстовое сообщение, отделенное пробелом. Код ответа — число от 100 до 999, представленное в виде строки, трактующийся следующим образом:
• 2ХХ — команда успешно выполнена;
• 3XX — ожидаются дополнительные данные от клиента;
• 4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время;
• 5ХХ — неустранимая ошибка.
Текстовая часть ответа носит справочный характер и предназначен для человека, а не программы.
ESMTP — расширяемый протокол, в отличии от SMTP. При установлении соединения сервер объявляет о наборе поддерживаемых расширений (в качестве ответа на команду EHLO). Соответствующие расширения могут быть использованы клиентом при работе. Необходимо помнить, что если сессия начинается с команды HELO (используемой в «классическом» SMTP, RFC 821), то список расширений выводиться не будет.
POP3 (англ. Post Office Protocol Version 3 — протокол почтового отделения, версия 3) — это сетевой протокол, для получения сообщений электронной почты с сервера. Обычно используется в паре с протоколом SMTP[13]. Команды протокола POP3 (для минимальной конфигурации), представлены в приложении 7.
Широкое распространение получили две версии POP – POP2 и POP3. Протокол POP2 определен в стандарте RFC 937 и использует порт 109. POP3 определен в RFC 1725 и использует порт 110. Это несовместимые протоколы, в которых применяются разные команды, но они выполняют одинаковые функции. Предыдущие версии протокола (POP, POP2) устарели.
Стандарт протокола POP3 определён в RFC 1939. Расширения и методы авторизации определены в RFC 2195, RFC 2449, RFC 1734, RFC 2222, RFC 3206, RFC 2595.
IMAP (англ. Internet Message Access Protocol) — интернет-протокол прикладного уровня для доступа к электронной почте, определенный в стандарте RFC 1176 и созданный для того, чтобы заменить POP. В число его возможностей входит поиск текста на удаленной системе и синтаксический анализ сообщений, а этого как раз и нет в POP.
Альтернативным протоколом для сбора сообщений с почтового сервера является IMAP.
IMAP предоставляет пользователю богатые возможности для работы с почтовыми ящиками, находящимися на центральном сервере. Почтовая программа, использующая этот протокол, получает доступ к хранилищу корреспонденции на сервере так, как будто эта корреспонденция расположена на компьютере получателя. Электронными письмами можно манипулировать с компьютера пользователя (клиента) без необходимости постоянной пересылки с сервера и обратно файлов с полным содержанием писем.
IMAP был разработан для замены более простого протокола POP3 и имеет следующие преимущества: (по сравнению с POP).
• Письма хранятся на сервере, а не на клиенте;
• Поддержка нескольких почтовых ящиков (или папок);
• Возможно создание общих папок, к которым могут иметь доступ несколько пользователей;
• Информация о состоянии писем хранится на сервере и доступна всем клиентам;
• Поддержка поиска на сервере;
• Поддержка онлайн-работы. Клиент может поддерживать с сервером постоянное соединение, при этом сервер в реальном времени информирует клиента об изменениях в почтовых ящиках, в том числе о новых письмах;
• Предусмотрен механизм расширения возможностей протокола.
В отличие от POP3, IMAP может заниматься как доставкой исходящей почты от пользователя в направлении места назначения, так и доставлять входящую почту пользователя.
Текущая версия протокола имеет обозначение IMAP4rev1 (IMAP, версия 4, ревизия 1). Протокол поддерживает передачу пароля пользователя в зашифрованном виде. Кроме того, IMAP-трафик можно зашифровать с помощью SSL - (Secure Socket Layer). SSL позволяет защитить передачу данных по сети, кроме того с помощью SSL можно управлять личными сертификатами, указывать службы сертификации и другие параметры шифрования (широко используется в операционных системах Linux)[14].