статьиGNU Free Documentation License материалы взяты из Википедии Статья была изменена. Оригинал статьи.

SMTP

Материал из Энциклопедии в свободной энциклопедии
Перейти к: навигация, поиск
SMTP
Название:

Simple Mail Transfer Protocol

Уровень (по модели OSI):

Прикладной

Семейство:

TCP/IP

Порт/ID:

25/TCP

Назначение протокола:

Отправка электронной почты

Спецификация:

RFC 5321

Основные реализации (клиенты):

MUA (The Bat!, MS Outlook, MS Outlook Express, Mozilla Thunderbird)

Основные реализации (серверы):

MTA (sendmail, postfix, qmail, exim, Microsoft Exchange Server, MDaemon)

Расширяемость:

Доп. команды (RFC 2449)

SMTP (англ. Simple Mail Transfer Protocol в простой протокол передачи почты) в это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.

ESMTP (англ.  Extended SMTP) в масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают ESMTP и его расширения.

Содержание

[править] Обзор протокола

SMTP используется для отправки почты от пользователей к серверам и между серверами для дальнейшей пересылки к получателю. Для приёма почты, почтовый клиент должен использовать протоколы POP3 или IMAP. Работа с SMTP происходит непосредственно на сервере получателя. Поддерживает функции: установление соединения, аутентификация, передача данных.

Чтобы доставить сообщение до адресата, необходимо переслать его почтовому серверу домена, в котором находится адресат. Для этого обычно используется запись типа MX (англ. Mail eXchange в обмен почтой) системы DNS. Если MX запись отсутствует, то для тех же целей может быть использована запись типа A. Некоторые современные реализации SMTP-серверов (например, Exim[1]) для определения сервера, обслуживающего почту в домене адресата, также могут задействовать SRV-запись (RFC 2782).

Широкое распространение SMTP получил в начале 1980-х годов. До него использовался протокол UUCP, который требовал от отправителя знания полного маршрута до получателя и явного указания этого маршрута в адресе получателя, либо наличия прямого коммутируемого или постоянного соединения между компьютерами отправителя и получателя.

Sendmail был одним из первых (если не первым) агентом отправки сообщений, который начал работать с SMTP. В настоящее время протокол SMTP является стандартным для электронной почты и его используют все клиенты и серверы.

Протокол был разработан для передачи только текста в кодировке ASCII, кроме того, первые спецификации требовали обнуления старшего бита каждого передаваемого байта. Это не даёт возможности отсылать текст на национальных языках (например, кириллице), а также отправлять двоичные файлы (такие как изображения, видеофайлы, программы или архивы). Для снятия этого ограничения был разработан стандарт MIME, который описывает способ преобразования двоичных файлов в текстовые. В настоящее время большинство серверов поддерживают 8BITMIME, позволяющий отправлять двоичные файлы так же просто, как текст. Основные команды:

MAIL FROM адрес отправителя

RCPT TO адрес получателя (может быть несколько. На каждого получателя отдельно приходит квитанция)

DATA передача данных (письма). Производится в ASCII. Данные формируются как сегменты ТСР. Конец письма точка в пустой строке.

QUIT разрыв соединения

Установление и закрытие соединения непосредственно с сервером производится по ТСР. Контроль за пользовательскими данными возложен на ТСР.

Сервер SMTP в это конечный автомат с внутренним состоянием. Клиент передает на сервер строку команда<пробел>параметры<перевод строки>[2]. Сервер отвечает на каждую команду строкой, содержащей код ответа и текстовое сообщение, отделенное пробелом. Код ответа в число от 100 до 999, представленное в виде строки, трактующийся следующим образом:

  • 2ХХ в команда успешно выполнена
  • 3XX в ожидаются дополнительные данные от клиента
  • 4ХХ в временная ошибка, клиент должен произвести следующую попытку через некоторое время
  • 5ХХ в неустранимая ошибка

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

ESMTP в расширяемый протокол, в отличие от SMTP. При установлении соединения сервер объявляет о наборе поддерживаемых расширений (в качестве ответа на команду EHLO). Соответствующие расширения могут быть использованы клиентом при работе. Необходимо помнить, что если сессия начинается с команды HELO (используемой в «классическом» SMTP, RFC 821), то список расширений выводиться не будет.

[править] Безопасность SMTP и спам

Изначально SMTP не поддерживал единой схемы авторизации. В результате этого спам стал практически неразрешимой проблемой, так как было невозможно определить, кто на самом деле является отправителем сообщения в фактически можно отправить письмо от имени любого человека. В настоящее время производятся попытки решить эту проблему при помощи спецификаций SPF, Sender ID, DKIM. Единой спецификации на настоящий момент не существует.

[править] Пример простейшей SMTP-сессии

C: в клиент, S: в сервер

S: (ожидает соединения)
C: (Подключается к порту 25 сервера)
S:220 mail.company.tld ESMTP CommuniGate Pro 5.1.4i is glad to see you!
C:HELO
S:250 domain name should be qualified
C:MAIL FROM: <someusername@somecompany.ru>
S:250 someusername@somecompany.ru sender accepted
C:RCPT TO:<user1@company.tld>
S:250 user1@company.tld ok
C:RCPT TO: <user2@company.tld>
S:550 user2@company.tld  unknown user account
C:DATA
S:354 Enter mail, end with "." on a line by itself
C:from: someusername@somecompany.ru                    //чтобы письмо  
C:to: user1@company.tld                                //не было добавлено
C:subject: tema                                        //в категорию спам
C:                                                     //
C:Hi!
C:.
S:250 769947 message accepted for delivery
C:QUIT
S:221 mail.company.tld CommuniGate Pro SMTP closing connection
S: (закрывает соединение)

В результате такой сессии письмо будет доставлено адресату user1@company.tld, но не будет доставлено адресату user2@company.tld, потому что такого адреса не существует.

[править] Расширения ESMTP

RFC 1869 предписывает начинать сессию не командой HELO, а командой EHLO. В случае, если сервер не поддерживает расширений, то он ответит на EHLO ошибкой, в этом случае клиент должен послать команду HELO и не использовать расширения протокола.

Если же сервер поддерживает ESMTP, то кроме приветствия он сообщит список поддерживаемых расширений протокола SMTP, например:

ehlo office.company1.tld
250-mail.company2.tld is pleased to meet you
250-DSN
250-SIZE
250-STARTTLS
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5 GSSAPI MSN NTLM
250-ETRN
250-TURN
250-ATRN
250-NO-SOLICITING
250-HELP
250-PIPELINING
250 EHLO

[править] Стандарты RFC

[править] Примечания

  1. в‘ Спецификация Exim MTA Описание dnslookup роутера (англ.)
  2. в‘ Опытным путем было установлено, что после команды EHLO необходимо два переноса строки

[править] См. также

Источник в «/w/index.php?title=SMTP&oldid=43763868»
Пространства имён

Варианты
Действия