Протокол SMTP
Содержание:
- Формат письма
- Заголовки письма
- Команды
- MIME
- Extended SMTP
- STARTTLS (Start Transport Layer Security)
- Заголовок multipart
- BASE64
- Настройка зоны DNS: PTR запись
- Настройка зоны DNS: SPF
- DomainKeys Identified Mail
Формат письма
- Заголовок SMTP
- Имя отправляющего узла (EHLO, IP)
- MAIL FROM
- RCPT TO
- Письмо
- Заголовки письма (DATE, FROM, TO, MESSAGE-ID, SUBJECT)
- Пустая строка
- Тело письма
Заголовки письма
-
Date - Дата и время создания сообщения
-
From - Адреса авторов сообщения, разделенные запятой.
Если адресов несколько, должно быть поле Sender.
-
Sender - Адрес отправителя.
Если From содержит один адрес, то Sender может отсутствовать. Если значения Sender и From совпадают, то Sender должно отсутствовать.
-
Reply-to - Адрес, на который автор сообщения желал бы получить ответ.
-
To - Адреса адресатов, разделенные запятой.
-
Cc - Копии. Адреса других адресатов, разделенные запятой.
-
Bcc - Слепые копии. Адреса адресатов, которые будут не видны другими адресатами, получающим это сообщение. Разделяются запятыми.
-
Message-id - Уникальный идентификатор сообщения. Идентификатор уникален для всего мира.
-
In-Reply-To - Идентификатор сообщения, на которое делается ответ.
-
References - Идентификатор сообщения, на которое делается ответ.
-
Subject - Тема сообщения.
-
Comments - Дополнительные комментарии к сообщению.
-
Keywords - Ключевые слова, которые могут быть полезны адресату.
-
Resent-Date, Resent-From, Resent-Sender, Resent-To, Resent-Cc, Resent-Bcc, Resent-Message-Id - Используются при пересылке сообщения. Эти поля содержат информацию, измененную тем, кто производил пересылку.
-
Return-Path - Почтовый адрес, проставляемый SMTP-сервером на стадии финальной отсылки. Используется для доставки отчета об ошибке.
-
Received - Используется для идентификации SMTP-серверов, которые принимали участие в отправке сообщения от отправителя к получателю. Каждый SMTP-сервер добавляет свое поле.
-
Encrypted - Указывает на то, что сообщение было подвергнуто шифрованию.
-
MIME-Version - Содержит версию MIME.
-
Content-Type - Наиболее полная информация о содержимом сообщения, которая позволяет почтовому клиенту выбрать соответствующий механизм обработки.
-
Content-Transfer-Encoding - Указывается способ помещения двоичных данных в тело сообщения.
-
Поля начинающиеся с X- - Дополнительное незарегистрированное поле. Разные почтовые клиенты могут использовать разные незарегистрированные поля для собственных нужд.
Команды
В конце каждой команды ставится перевод строки: /r/n
-
HELO
domain
Идентификация отправителя на принимающем сервере. В случае успешного выполнения этой команды получатель и отправитель готовы к дальнейшей работе.
-
MAIN FROM
email
Отправить почту по одному или более адресатам.
-
RCPT TO
email
Определение одного получателя почты. Множество получателей определяются множеством этих команд.
-
DATA
Получатель получает данные о дате отправке почты. После этой команды клиент передает сообщение.
-
SEND FROM:
email
Используется вместо MAIL FROM для передачи на терминал получателя.
-
SOML FROM:
email
Используется для передачи на терминал получателя или в почтовый ящик, если пользователь не активен или запретил прием сообщений с терминала.
-
SAML FROM:
email
Используется для передачи и на терминал, и в почтовый ящик.
-
RSET
Аннулирует все переданные до нее на сервер данные. Процесс передачи сообщения нужно начать заново.
-
VRFY
email
Проверка наличия указаного адреса. Сервер посылает информацию о владельце ящика или говорит, что ящик не существует.
-
EXPN
email
Получение адресов, внесенных в список рассылки
-
HELP
[command]
Описание команды \ список доступных команд
-
NOOP
Сервер отправляет ОК
-
QUIT
Сервер отправляет ОК и закрывает канал связи
-
**TURN **
- Получатель отправляет ОК и берет на себя роль SMTP-передатчика
- Отвечает отказом и остается в роли SMTP-приёмника.
MIME
Multipurpose Internet Mail Extension – стандарт, описывающий передачу различных типов данных по электронной почте.
Спецификация для кодирования информации и форматирования сообщений для передачи разного рода информации внутри текстовых данных.
Определяет набор e-mail-заголовков для определения дополнительных атрибутов сообщения.
Определяет множество кодировок, которые могут быть использованы для представления 8-битных бинарных данных с помощью символов из 7-битного ASCII.
Примеры заголовков
Mime-Version – версия MIME.
Mime-Version: 1.0 MIME-Version: 1.0 (Generated by GBD 3.7)
Content-Type – тип сообщения.
Content-Type: text/plain; charset=KOI-8 application: octet-stream
Content-Transfer-Encoding – тип транспортного кодирования
Content-Transfer-Encoding: base64
Extended SMTP
Механизм расширений протокола SMTP
S: 220 smtp.example.com ESMTP Postfix
C: EHLO bob.example.org
S: 250 smtp.example.com Hello bob.example.org [192.0.2.201]
S: 250 8BITMIME
S: 250 SIZE 14680064
S: 250 AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5
S: 250 STARTTLS
S: 250 PIPELINING S: 250 HELP
S: 250 ETRN
S: 250 CHECKPOINT
## AUTH – аутентификация и шифрование
S: 220 smtp.server.com Simple Mail Transfer Service Ready
C: EHLO client.example.com
S: 250-smtp.server.com Hello client.example.com
S: 250 AUTH LOGIN PLAIN CRAM-MD5
C: AUTH LOGIN
S: 334 VXNlcm5hbWU6 Base64(Username:)
C: dm92YQ== Base64(vova)
S: 334 UGFzc3dvcmQ6 Base64(Password:)
C: c2VjcmV0X3Bzd2Q= Base64(secret_pswd)
S: 235 2.7.0 Authentication successful
STARTTLS (Start Transport Layer Security)
C: EHLO client.example.com
S: 250-smtp.server.com Hello client.example.com
S: 250-AUTH LOGIN PLAIN CRAM-MD5
S: 250-STARTTLS
C: STARTTLS
S: 220 TLS go ahead
C:
C: C & S:
C: EHLO client.example.com *
S: 250-smtp.server.com Hello client.example.com
S: 250-AUTH LOGIN PLAIN CRAM-MD5
C: AUTH LOGIN S: 334 VXNlcm5hbWU6
C: dm92YQ== S: 334 UGFzc3dvcmQ6
C: c2VjcmV0X3Bzd2Q=
S: 235 2.7.0 Authentication successful
Заголовок multipart
Содержимое письма состоит из некоторого множества частей, содержащих данные различных взаимонезависимых типов.
__mixed __ основной подтип;
alternative представление одних и тех же данных в разных форматах;
parallel одновременный просмотр разных частей документа;
digest объединение в одном письме частей, каждая из которых имеет тип message.
Пример multipart/alternative
Content-Type: multipart/alternative; boundary=boundary42
–boundary42
Content-Type: text/plain; charset=us-ascii
… Здесь содержится версия простым текстом ….
–boundary42
Content-Type: text/richtext
…. Здесь содержится версия с разметкой RFC 1341…
–boundary42
Content-Type: text/x-whatever
…. Здесь содержится версия в гипотетическом формате..
–boundary42–
BASE64
Схема преобразования произвольной последовательности байт в последовательность печатных ASCII символов.
символы (A—Z, a—z),
цифры (0—9), символы «+» и «/»,
символ «=» в качестве специального кода суффикса.
Hello, World -> SGVsbG8sIFdvcmxk
Настройка зоны DNS: PTR запись
44.33.22.11.in-addr.arpa. IN PTR mail.example.com.
В случае Mail сервера для двух доменов PTR-запись должна указывать на имя почтового хоста (которое он передает в рамках SMTP-сессии), даже если он расположен в другом домене.
Настройка зоны DNS: SPF
DomainKeys Identified Mail
DKIM-Signature: v=1; a=rsa-sha256; d=example.net;
s=brisbane; c=relaxed/simple; q=dns/txt; l=1234;
t=1117574938; x=1118006938;
h=from:to:subject:date:keywords:keywords;
bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4 ZHRNiYzR