Доставка писем, Протокол SMTP - Компьютерные сети

Рассмотрим процесс доставки писем на примере. Пусть Алиса хочет отправить письмо Бобу.

    1. Почтовая программа Алисы (т. е. клиент или MUA - Mail User Agent ) отправляет письмо Бобу, ящик которого расположен на почтовом сервере в домене b. org. 2. По протоколу SMTP (Simple Mail Transfer Protocol) клиент Алисы посылает сообщение на ее почтовый сервер (smtp-сервер). Сервер помещает сообщение в очередь для отправки адресату. 3. SMTP-сервер Алисы узнает IP-адрес почтового сервера Боба, делая DNS-запрос типа MX для зоны b. org. 4. SMTP-сервер Алисы по протоколу SMTP посылает почтовому северу Боба сообщение. При этом SMTP-сервер Алисы выступает в роли клиента. 5. Почтовый сервер (Боба) помещает полученное сообщение в почтовый ящик Боба. 6. Почтовый клиент Боба забирает письмо с сервера по протоколу POP3 или IMAP.
Протокол SMTP

Протокол SMTP используется для транспортировки электронной почты на почтовый сервер. Работает поверх TCP, стандартный порт сервера 25. Команды - обычный ASCII текст.

Посылка почты осуществляется в 3 этапа:

    1. приветствие (рукопожатие); 2. пересылка писем; 3. закрытие сессии.

Пример SMTP-сессии

Server:220 Mail. Ru ESMTP

Client: HELO me. ru

Server: 250 mx24.mail. ru ready to serve

Client: MAIL FROM: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script >

Server: 250 OK

Client: RCPT TO: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script >

Server: 250 OK

Client: DATA

Server: 354 Go ahead

Client: Privet, Gena!!!

Pozdravlyau tebya s dnem rojdeniya ...

.

Server: 250 Message accepted for delivery

Client: QUIT

Server: 221 mx24.mail. ru closing connection

$ telnet mxs. mail. ru 25 // подключаемся к 25 порту почтового сервера домена mail. ru

Trying 194.67.23.20...

Connected to mxs. mail. ru.

Escape character is '^]'.

220 Mail. Ru ESMTP // приветствие от mxs. mail. ru

HELO me. ru // приветствие от меня ( me. ru - выдумка)

250 mx24.mail. ru ready to serve // всегда готов! - от mx24.mail. ru

MAIL FROM: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script > // я: отправляю письмо от себя (почтовый адрес - выдумка)

250 OK //mail. ru: понятно

RCPT TO: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script > // я: получатель - мой почтовый ящик на mail. ru

250 OK //mail. ru: такой почтовый ящик имеется

DATA //я: посылаю данные

354 Go ahead //mail. ru: давай!

Privet, Gena!!!

Pozdravl yau tebya s dnem rojdeniya ... // я: текст письма

. // я: единственная точка на строке - конец письма

250 Message accepted for delivery //mail. ru: Сообщение принято для доставки

QUIT //я: конец

221 mx24.mail. ru closing connection //mail. ru: закрываю соединение

На самом деле было так:

Server:220 Mail. Ru ESMTP

Client: HELO me. ru

Server: 250 mx24.mail. ru ready to serve

Client: MAIL FROM: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script >

Server: 250 OK

Client: RCPT TO: < \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script >

Server: 250 OK

Client: DATA

Server: 354 Go ahead

Client: Privet, Gena!!!

Pozdravlyau tebya s dnem rojdeniya ...

.

Server: 550 spam message discarded. If you think that the system is mistaken, please report details to \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

Client: QUIT

Server: 221 mx24.mail. ru closing connection

На самом деле после посылки сообщения серверу был получен такой ответ:

550 spam message discarded.

If you think that the system is mistaken,

Please report details to \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script //mail. ru: это спам! Жалобы посылайте на адрес:

// оскорбления @corp. mail. ru

Проблема скрывается в формате нашего письма: отсутствует заголовок с полями From, To и Subject. Поэтому mail. ru расценивает это как спам.

Формат сообщения электронной почты

Сообщение электронной почты - это набор символов в семиразрядной кодировке ASCII (начинается с нуля (0-127)). Символы кодируются битами.

From: <адрес отправителя> // обязательное поле

To: <адрес получателя> // обязательное поле

Subject: <тема> // необязательное поле

CC: <список получателей, которым отправится копия> // необязательное поле

BCC: <список адресов> (это "слепая копия", то есть получатели не знают, что это письмо отправлено еще кому-то) // необязательное поле

<Пустая строка>

<Текст письма в семибитной кодировке ASCII>

Если требуется передать символы, отличающиеся от ASCII, то используется кодирование. После получения сообщения сервер добавляет в заголовок строчку:

Received: from < отправитель > by < получатель > < когда >

Пример

From: \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

To: \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

Subject: Pozdravlyau!

Privet, Gena!!!

Pozdravlyau tebya s dnem rojdeniya ...

.

Кодирование сообщений

MIME (Multipurpose Internet Mail Extension - многоцелевое расширение почты Интернета) -- стандарт, описывающий передачу различных типов данных по электронной почте.

В заголовок сообщения добавляются строки:

MIME-Version: 1.0

Content-Transfer-Encoding: 8bit

Content-Type: text/plain; charset="Windows-1251"

Поле заголовка Content-Type идентифицирует данные, заключенные в MIME-сообщение. В настоящее время используется семь основных классов данных, идентифицированных в MIME. В каждом классе имеются свои подклассы, которые более детально характеризуют тип данных, заключенных в сообщении.

Часто встречающиеся значения поля Content - Type (формат: Content - Type: тип / подтип; параметры):

    - text / html или text/ enriched (с форматированием); - image / gif или image/jpeg; - multipart / mixed (для сообщений с вложениями).

Чтобы передавать сообщение не только из семибитной ASCII, используется кодирование.

Часто встречающиеся значения поля Content-Transfer-Encoding:

    - 7bit; - 8bit; - binary; - base64; - quoted-printable.

Например, 8bit или base 64.

При кодировании увеличивается размер (как минимум, на 25%).

На сегодняшний день существует семь различных способов кодирования двоичных данных, однако наиболее часто встречается кодирование base64. При применении этого метода кодирования 6-битовые блоки двоичных данных преобразуются в 8-битовые блоки, воспринимаемые как текст ASCII. Таким образом, в base 64 для кодирования 3 байтов (24 бита) используются 4 байта (32 бита).

Значения Content-Transfer-Encoding "7bit", "8bit" и "binary" означают, что никакого преобразования не произведено.

Base64. В формате электронной почты MIME base64 -- это схема, по которой произвольная последовательность байт преобразуется в последовательность печатных ASCII символов. Это определяет MIME как транспортное кодирование содержимого для использования в электронной почте. Используются только символы латинского алфавита в верхнем и нижнем регистре -- символы (A--Z, a--z), цифры (0--9), и символы "+" и "/", с символом "=" в качестве специального кода суффикса.

Полная спецификация этой формы base64 содержится в RFC 1421 и RFC 2045. Эта схема используется для кодирования последовательности октетов (байт). Это соответствует определению файлов почти во всех системах. Результирующие закодированные по base64 данные имеют длину, большую оригинальной в соотношении 4:3, и напоминают по виду случайные символы.

Для того, чтобы преобразовать данные в base64, первый байт помещается в самые старшие восемь бит 24-битного буфера, следующие в средние восемь и третий в младшие значащие восемь бит. Если кодируется менее чем три байта, то соответствующие биты буфера устанавливаются в ноль. Далее каждые шесть бит буфера, начиная с самых старших, используются как индексы строки "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123 456789+/" и ее символы, на которые указывают индексы, помещаются в выходную строку. Если кодируются только один или два байта, используются только первые два или три символа строки и выходная строка дополняется двумя или одним символами "=". Это предотвращает добавление дополнительных битов к восстановленным данным. Процесс повторяется над оставшимися входными данными.

Например, исторический слоган Википедии,

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

Закодирован в base64 следующим образом:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFz b24sIGJ1dCBieSB0

AGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGl jaCBpcyBhIGx1

C3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2Yg ZGVsaWdodCBpbiB0

AGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24 gb2Yga25vd2xlZGdl

LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm 5hbCBwbGVhc3VyZS4=

Дополнения (attachments)

From: \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

To: \n Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

Subject: Pozdravlyau!

MIME-Version: 1.0

Content-Type: multipart/mixed; boundary="----------F9876678DDB9"

----------F9876678DDB9

Content-Type: text/plain; charset=Windows-1251

Content-Transfer-Encoding: 8bit

Privet, Gena!!!...

----------F9876678DDB9

Content-Type: image/jpg; name="otkritka. jpg"

Content-transfer-encoding: base64

Content-Disposition: attachment; filename="otkritka. jpg"

Base64 encoded data.....

----------F9876678DDB9

Похожие статьи




Доставка писем, Протокол SMTP - Компьютерные сети

Предыдущая | Следующая