Электронная почта.

Служба электронная почта - предназначена для обмена сообщениями (письмами).

Клиент (MS Outlook, The bat ...) готовит ("упаковывает") и посылает серверу (почтовое отделение) сообщения, принимает и просматривает сообщения.

Сервер электронной почты (Sendmail, MS Exchange ...) обрабатывает сообщения (сортирует) и отправляет локальному адресату или удаленному серверу (почтовому отделению).

Электронная почта во многом похожа на обычную почтовую службу.

8-1

Отправка и получение почты

Основные протоколы:

  • SMTP (Simple Mail Transfer Protocol) - простой протокол передачи почты, используется для отправки почты, как клиентом на сервер, так и сервером на другой сервер.

  • POP3 (Post Office Protocol) - используется для приема почты клиентом с сервера.

  • IMAP 4 (Internet Message Access Protocol) -

  • UUCP (Unix-Unix-CoPy) - используется для отправки и приема почты, как клиентом на(с) сервер(а), так и сервером на другой сервер. В данное время почти не используется, поэтому рассматривать не будем.

Формат сообщения.

Первый стандарт - RFC0724 (Proposed official standard for the format of ARPA Network messages D. Crocker, K.T. Pogran, J. Vittal, D.A. Henderson May-12-1977).

Последняя версия - RFC2822 (Internet Message Format P. Resnick, Ed. April 2001).

Текстовая (ASCII) информация может передаваться, как есть.

Остальная информация должна быть закодирована, т.к. изначально не предполагалось ее передавать. При использовании расширения протокола SMTP - ESMTP (Enhaced SMTP) можно кодировать в 8-битном виде. Это все выполняет почтовая программа.

Виды кодирования:

base64 - кодирует из набор 00-FFв ASCII, чтобы можно было передавать по SMTP (кодируют бинарные файлы).

7bit - не кодирует, указывает, что код ASCII.

8bit - указывает, что не только символы ASCII.

quoted-printable - используется для кодирования национальных языков, символов второй части таблицы ("А" - "=3D").

Сообщение состоит из:

  • конверта сообщения (информация для доставки и обработки сообщения)

  • тела сообщения (данные отправителя)

В простом случае конверт состоит только из заголовка, который отделен от тела пустой строкой.

Примеры сообщений:


From: <vasy@list.ru> // адрес отправителя
To: <pety@kfti.knc.ru> // адрес получателя
Subject: С новым годом! // тема сообщения
Mime-Version: 1.0 // инициализация Mime
X-Mailer: mPOP Web-Mail 2.19 // тип и версия почтовой программы клиента
Date: Fri, 19 Sep 2003 08:37:43 +0400 // дата отправки сообщения
Reply-To: <vasy@list.ru> // адрес для ответа
Content-Type: text/plain; charset=koi8-r // тип и подтип MIME
Content-Transfer-Encoding: 8bit // идентификатор типа кодировки
Message-Id: <E1A0D1b-000AnC-00.vasy-list-ru@f15.mail.ru> // уникальный идентификатор сообщения

С новым годом Петя! //Тело сообщения

Пример простого сообщения


Received: by dionis.kfti.knc.ru with SMTP; Thu, 10 Oct 2002 16:00:49 +0400 (MSK)
Message-ID: <005f01c27055$b0be7c80$6df155c2@kfti.knc.ru>
From: "Katia" <katia@dionis.kfti.knc.ru>
To: <gena@dionis.kfti.knc.ru>
Cc: "Dima" <dima@kfti.knc.ru>,"Lena" <lena@kfti.knc.ru>
Subject: С новым годом!
Date: Thu, 10 Oct 2002 16:08:05 +0400
Organization: KPhTI
MIME-Version: 1.0
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200

Пример заголовка сообщения с отправкой нескольким пользователям (поле Ccулыбаюсь


From: dima@dionis.kfti.knc.ru
To: igor@dionis.kfti.knc.ru
Subject: С новым годом!
Received: by nmc.tatarstan.ru; Fri, 06 Dec 2002 13:53:32 +0300 (msk)
Received: by kabmin.kazan.su; Fri, 06 Dec 2002 13:48:16 +0400 (MSK)
Received: by nmc.tatarstan.ru; Thu, 05 Dec 2002 18:47:11 +0300 (msk)
Received: from spider.ts by nmc.tatarstan.ru with SMTP; Thu, 05 Dec 2002 18:37:26 +0300 (msk)
Received: (qmail 3541 invoked from network); 5 Dec 2002 15:38:24 -0000
Received: from unknown (HELO mvv) (192.168.103.44) by spider.ts with SMTP; 5 Dec 2002 15:38:21 -0000
Organization: Techoserv A/S
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Dipost Crypto (v2.50C)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-Copy-From: gena@kabmin.tatarstan.ru
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="---Factor Dimail---"

Пример заголовка сообщения с промежуточными серверами (поле - Receivedулыбаюсь


X-DIONIS-Forwarded: by <library@dionis.kfti.knc.ru> to <bogomolov@dionis.kfti.knc.ru> at Tue, 22 Feb 2000 14:42:05 +0300 (MSK)
Received: by nmc.tatarstan.ru; Tue, 22 Feb 2000 14:41:51 +0400 (msk)
Received: from ben.irex.ru by nmc.tatarstan.ru with SMTP; Tue, 22 Feb 2000 14:34:01 +0400 (msk)
Received: from unknown ([195.178.196.156])
by ben.irex.ru (8.9.3/8.9.1) with SMTP id NAA25654;
Tue, 22 Feb 2000 13:29:41 +0300
Message-ID: <014801bf7d20$1a388380$9cc4b2c3@ben.irex.ru>
From: "Jakubson Olga" <springer@ben.irex.ru>
To: <bob@bionet.nsc.ru>
Cc: <orlov@iephb.ru>, <sln@ipae.uran.ru>, <nov@ieie.nsc.ru>,
<rita@ief.uran.ru>, <library@ineos.ac.ru>, <bibl@ISEM.SEI.IRK.RU>,
<pbl@ibrae.ac.ru>, <alekhina@omrb.pnpi.spb.ru>,
<library@dionis.kfti.kcn.ru>, <ieshko@krc.karelia.ru>,
<igourevi@ccas.ru>, <cnb@post.krascience.rssi.ru>, <root@ksc.komi.ru>,
<beht@kti.nsc.ru>, <lib@tdi.nsk.su>, <ognev@nfi.kiae.su>,
<liogn@geocities.com>, <semenov@min.mus.msk.ru>, <root@omega.laser.ru>,
<ldisk@fo.gpi.ac.ru>
Subject: Acedemic Press
Date: Tue, 22 Feb 2000 13:30:48 +0300
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2014.211
X-Mimeole: Produced By Microsoft MimeOLE V5.00.2014.211
FileName: 001.html, APPEAL Schedule I.doc, Russia Trial Add.2000 jede Institution.doc

Пример заголовка сообщения с прикрепленными файлами (FileName).


Received: by nmc.tatarstan.ru; Tue, 28 Dec 1999 12:21:13 +0400 (msk)
Message-Id: <adn_1110_0_@nmc.tatarstan.ru>
X-DIONIS-Forwarded: by <webmaster@nmc.tatarstan.ru> to <bogomolov@dionis.kfti.kcn.ru> at Tue, 28 Dec 1999 12:18:25 +0400 (msk)
Received: from oracle.m9.am.ru by nmc.tatarstan.ru with SMTP; Tue, 28 Dec 1999 12:00:56 +0400 (msk)
Received: (from ar@localhost)
by oracle.m9.am.ru (8.8.8/8.8.8) id MAA01876
for webmaster@if.kazan.ru; Tue, 28 Dec 1999 12:01:51 +0300
Date: Tue, 28 Dec 1999 12:01:51 +0300
Message-Id: <199912280901.MAA01876@oracle.m9.am.ru>
From: InterReklama Administrator <support@bizlink.ru>
To: Влад <webmaster@if.kazan.ru>
Reply-to: InterReklama Administrator <support@bizlink.ru>
Subject: HTML-код
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="BANNERBANK_280830843726477"

--BANNERBANK_280830843726477
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 8bit

Здравствуйте!

Посылаю файл wget.tgz

--BANNERBANK_280830843726477
Content-Type: application/octet-stream; name="wget.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="wget.tgz"

H4sICHc5pzYAA3dnZXQxNTMudGFyAOw8a1PbyLL7NfoVfSC1GAoZm+eGbLYg
PBJXwFDYSTZ1zqlkLI3tucga7WiE8X44v/1290iybCBx2GzOrbpxbYwlzXT3
9Lt7RjseSOs36zv1rY2f/q4PbDf2dnYA/+41t/fwL36am+6v+zQAdncbzZ3G
...
...
...
vUav0Wv0Gr1Gr9Fr9Hr61/8PvGbSyABoGgA=

--BANNERBANK_280830843726477--

Пример заголовка сообщения с прикрепленным файлом

Некоторые поля заголовка:

From - адреса отправителей.

Sender - адрес реального отправителя.
Пример:
From: vasy@mail.ru
pety@mail.ru
Sender: misha@mail.ru

To - адрес получателя.

Cc - адреса получателей копий сообщений.
Пример:
To: vasy@mail.ru
pety@mail.ru
Cc: misha@mail.ru, katy@mail.ru

Date - дата отправки сообщения.

Subject - тема сообщения.

Message-ID - уникальный идентификатор сообщения.

Reply-To - адрес для ответа.

Received - адреса и время обработки сообщения промежуточным сервером.

X-Mailer - тип и версия почтовой программы клиента.

Comments - комментарии.

Priority - приоритетность.

Organization - название организации отправителя

MIME-Version - поле для идентификации стандарта MIME, значит письмо использует MIME.

Content-Type - тип и подтип MIME (text/html,audio/midi).

Content-Transfer-Encoding - идентификатор типа кодировки (base64, quoted-printable, 7bit, 8bit, binary и т.д.).

base64 - кодирует из набор 00-FFв ASCII, чтобы можно было передавать по SMTP (кодируют бинарные файлы).

7bit - не кодирует, указывает что код ASCII.

8bit - указывает, что не только символы ASCII.

quoted-printable - используется для кодирования национальных языков, символов второй части таблицы ("А" - "=3D").

Протокол SMTP

Первый стандарт - RFC0788 (Simple Mail Transfer Protocol J. Postel Nov-01-1981).

Последняя версия - RFC2821 (Simple Mail Transfer Protocol J. Klensin, Ed. April 2001).

Simple Mail Transfer Protocol - протокол высокого уровня (а именно, уровня приложений), используется для отправки почты, как клиентом на сервер, так и сервером на другой сервер.

Порт по умолчанию - 25.

Основной недостаток протокола, это отсутствие аутентификации и "докачки" (как в FTP, HTTP) сообщений, т.е. если вы посылаете большое письмо (10Мбайт), то в случае разрыва соединения ваше сообщение придется передавать заново, и возможно так до бесконечности. Поэтому большие письма необходимо резать на части.

 Модель протокола

События работы SMTP протокола:

  • Клиент инициирует соединение с сервером

  • Клиент посылает запросы на обслуживание

  • Сервер отвечает на эти запросы

8-2

Модель протокола SMTP

Последовательность команд SMTP

Протокол SMTP оговаривает последовательность SMTP-команд

Рассмотрим пример:

Некий Vasy абонент сервера kstu.ru, посылает письма трем абонентам сервера kazan.ru (Pety, Koly, Dima) одно письмо.

Рассмотрим листинг передачи сервера kstu.ru серверу kazan.ru:

R - сервер (receive)

S - клиент (send)


R 220 kazan.ru Simple Mail Transfer Service Ready // код ответа 220 (соединение установлено), сервер kstu.ru, протокол SMTP
S HELO kstu.ru // Соединение установлено, "Я kstu.ru", идентификация производится по kstu.ru
R 250 kazan.ru // команда принята и обработана, идентификация прошла
S MAIL FROM: <Vasy@kstu.ru> // Начало почтовой транзакции, обратный адрес Vasy@kstu.ru.
R 250 OK // Сервер согласен принять сообщение от Vasy@kstu.ru
S RCPT TO:<Pety@kazan.ru> // Кому отправить письмо, Pety@kazan.ru
R 250 OK // Сервер согласен принять сообщение для Pety@kazan.ru
S RCPT TO:<Koly@kazan.ru> // Еще кому отправить письмо, Koly@kazan.ru
R 550 No such user here // Сервер выдает ошибку 550, сообщая, что такого пользователя нет
S RCPT TO:<Dima@kazan.ru> // Еще кому отправить письмо, Dima@kazan.ru
R 250 OK // Сервер согласен принять сообщение для Dima@kazan.ru
S DATA // Запрос на передачу данных
R 354 Start mail input; end with <CRLF>.<CRLF> // Разрешение передачи данных, последняя строка должна содержать "точку"
S From: <vasy@list.ru> //Текст сообщения (включая заголовок)...
S To: <pety@kfti.knc.ru>
S Subject: С новым годом!
S Mime-Version: 1.0
S X-Mailer: mPOP Web-Mail 2.19
S Date: Fri, 19 Sep 2003 08:37:43 +0400
S Reply-To: <vasy@list.ru>
S Content-Type: text/plain; charset=koi8-r
S Content-Transfer-Encoding: 8bit
S Message-Id: <E1A0D1b-000AnC-00.vasy-list-ru@f15.mail.ru>
S
S С новым годом Петя!
S . // Конец сообщения, клиент послал точку
R 250 OK // Сервер получил данные
S QUIT // Клиент делает запрос на закрытие соединения
R 221 kazan.ru Service closing transmission channel // Сервер закрывает соединение

 Некоторые команды SMTP

Обязательные команды (команды которые должны присутствовать всегда)

HELO - Открытие сеанса связи (hello).

MAIL - Начинает почтовую транзакцию, которая завершается передачей данных в один или несколько почтовых ящиков (mail).

RCPT - Идентифицирует получателя почтового сообщения (recipient).

Небязательные команды

DATA - Строки, следующие за этой командой, рассматриваются получателем как данные почтового сообщения. В случае SMTP, почтовое сообщение заканчивается комбинацией символов: CRLF-точка-CRLF.

RSET - Прерывает текущую почтовую транзакцию (reset).

NOOP - Требует от получателя не предпринимать никаких действий, а только выдать ответ ОК. Используется главным образом для тестирования.(No operation).

QUIT - Закрытие сеанса связи.

VRFY - Требует от приемника подтвердить, что ее аргумент является действительным именем пользователя.

SEND - Начинает почтовую транзакцию, доставляющую данные на один или несколько терминалов (а не в почтовый ящик).

SOML - Начинает транзакцию MAIL или SEND, доставляющую данные на один или несколько терминалов или в почтовые ящики.

SAML - Начинает транзакцию MAIL и SEND, доставляющие данные на один или несколько терминалов и в почтовые ящики.

EXPN - Команда SMTP-приемнику подтвердить, действительно ли аргумент является адресом почтовой рассылки и если да, вернуть адрес получателя сообщения (expand).

HELP - Команда SMTP-приемнику вернуть сообщение-справку о его командах.

TURN - Команда SMTP-приемнику либо сказать ОК и поменяться ролями, то есть стать STMP- передатчиком, либо послать сообщение-отказ и остаться в роли SMTP-приемника.

 Синтаксис некоторых команд SMTP

Команды, MAIL, SEND, SOML и SAML, имеют одинаковый синтаксис:

MAIL <пробел> FROM:<reverse-path> <carriage-return line-feed>

где:

<reverse path> (обратный адрес) указывает серверу, кому в случае ошибки отослать сообщение.

<carriage-return line-feed> (CRLF) возврат каретки.

Примечание: Команды SEND, SOML и SAML дополнительны и используются довольно редко.

Синтаксис RCPT похож на синтаксис команды MAIL:

RCPT <пробел> TO:<forward-path> <CRLF>

Однако, в отличие от MAIL, аргумент RCPT начинается со слова <ТО:>.

 Некоторые коды ответов SMTP

Каждая цифра в коде ответа имеет определенный смысл. Первая цифра означает, было ли выполнение команды успешно (2), неуспешно (5) или еще не закончилось (3). Как указано в приложении Е документа RFC 821, простой SMTP-клиент может анализировать только первую цифру в ответе сервера, и на основании ее продолжать свои действия. Вторая и третья цифры кода ответа разъясняют значение первой. Если вы разрабатываете SMTP-приложение, обязательно изучите конструкцию всех кодов SMTP-ответа.


211 Ответ о состоянии системы или помощь
214 Сообщение-подсказка (помощь)
220 <имя_домена> служба готова к работе
221 <имя_домена> служба закрывает канал связи
250 Запрошенное действие почтовой транзакции успешно завершилось
251 Данный адресат не является местным; сообщение будет передано по маршруту <forward-path>
354 Начинай передачу сообщения. Сообщение заканчивается комбинацией CRLF-точка-CRLF
421 <имя_домена> служба недоступна; соединение закрывается
450 Запрошенная команда почтовой транзакции не выполнена, так как почтовый ящик недоступен
451 Запрошенная команда не выполнена; произошла локальная ошибка при обработке сообщения
452 Запрошенная команда не выполнена; системе не хватило ресурсов
500 Синтаксическая ошибка в тексте команды; команда не опознана
501 Синтаксическая ошибка в аргументах или параметрах команды
502 Данная команда не реализована
503 Неверная последовательность команд
504 У данной команды не может быть аргументов
550 Запрошенная команда не выполнена, так как почтовый ящик недоступен
551 Данный адресат не является местным; попробуйте передать сообщение по маршруту <forward-path>
552 Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполнилось
553 Запрошенная команда не выполнена; указано недопустимое имя почтового ящика
554 Транзакция не выполнена

 Ретрансляция сообщений

Можно использовать промежуточные сервера для доставки почты получателю.

Пример:

передадим сообщение от Vasy@ksu.ru через хосты @kstu.ru, @mail.ru получателю Koly@kazan.ru

Механизм ретрансляции:

  • сообщение передается хосту @kstu.ru
    S MAIL FROM:<Vasy@ksu.ru>
    S RCPT TO:<@kstu.ru, @mail.ru, Koly@kazan.ru>

  • сообщение передается хосту @mail.ru
    S MAIL FROM:<@kstu.ru>
    S RCPT TO:<@mail.ru, Koly@kazan.ru>

  • ообщение передается хосту kazan.ru
    S MAIL FROM:<@mail.ru>
    S RCPT TO:<Koly@kazan.ru>

При этом параметры To, From и Cc остаются без изменений.

 Резервные почтовые серверы (relay)

В случае если основой сервер не доступен, почта может быть отправлена на резервный, который задается в записях MX (DNS). Резервный сервер хранит почту (клиент ее получить не может) до тех пор, пока не заработает основной сервер, как только основной заработает, резервный передает всю накопившеюся почту. Резервных серверов может быть достаточно много. Как правила несколько разных серверов являются резервными по отношению к друг другу.

8-3

Когда основной сервер не доступен, почта передается на резервный,
когда основной сервер становится доступен, резервный передает почту основному.

 Отправка сообщения на SMTP с помощью Telnet

Отправим письмо через Telnet.

Клиенту необходимо ввести следующие строки:


HELO
MAIL FROM: <bogomolov@kfti.knc.ru>
RCPT TO: <olga@kfti.knc.ru>
DATA
DATE: 27-Oct-2003 12:48:32
FROM: Влад Богомолов <bogomolov@kfti.knc.ru>
SUBJECT: С новым годом!
To: <olga@kfti.knc.ru>

С новым годом!
Влад!
.

Подключение и отправка письма telnet'ом (UNIX) на сервер SMTP (Дионис)

8-6

Подключение и отправка письма telnet'ом (Windows) к серверу SMTP (Дионис)

8-5

Подключение и отправка письма telnet'ом (UNIX) к серверу SMTP-Sendmail 8.12.8 (UNIX)

8-7

Последнее изменение: суббота, 28 ноября 2015, 15:53