SMTP
| Название: |
Simple Mail Transfer Protocol |
|---|---|
| Уровень (по модели OSI): |
Прикладной |
| Семейство: |
TCP/IP |
| Порт/ID: |
25/TCP |
| Назначение протокола: |
Отправка электронной почты |
| Спецификация: | |
| Основные реализации (клиенты): |
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
- RFC 1870 SMTP Service Extension for Message Size Declaration (заменяет RFC 1653)
- RFC 2034 SMTP Service Extension for Returning Enhanced Error Codes
- RFC 2505 Anti-Spam Recommendations for SMTP MTAs (BCP 30)
- RFC 4954 SMTP Service Extension for Authentication (заменяет RFC 2554)
- RFC 2822 Internet Message Format (заменяет RFC 822 aka STD 11)
- RFC 2920 SMTP Service Extension for Command Pipelining (STD 60)
- RFC 3030 SMTP Service Extensions for Transmission of Large and Binary MIME Messages
- RFC 3207 SMTP Service Extension for Secure SMTP over Transport Layer Security (заменяет RFC 2487)
- RFC 3461 SMTP Service Extension for Delivery Status Notifications (заменяет RFC 1891)
- RFC 3462 The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages (заменяет RFC 1892)
- RFC 3463 Enhanced Status Codes for SMTP (заменяет RFC 1893)
- RFC 3464 An Extensible Message Format for Delivery Status Notifications (заменяет RFC 1894)
- RFC 3552 Guidelines for Writing RFC Text on Security Considerations
- RFC 3834 Recommendations for Automatic Responses to Electronic Mail
- RFC 4409 Message Submission for Mail (заменяет RFC 2476)
- RFC 5321 Simple Mail Transfer Protocol (заменяет RFC 821 aka STD 10, RFC 974, RFC 1869, RFC 2821)
- RFC 5336 SMTP Extension for Internationalized Email Addresses
- Перевод RFC 2505 в Рекомендации по предотвращению спама для SMTP MTA
- Перевод RFC 2554 в Расширение сервиса SMTP для аутентификации
- Перевод RFC 5321 в Простой протокол передачи электронной почты (SMTP)
[править] Примечания
- в‘ Спецификация Exim MTA Описание dnslookup роутера (англ.)
- в‘ Опытным путем было установлено, что после команды EHLO необходимо два переноса строки
[править] См. также
- LMTP в производный от SMTP протокол, ориентированный на работу без очереди сообщений.
- POP3
- IMAP
- TCP
- Sender Policy Framework
- Sender ID
- X.400
- Предотвращение утечек информации через SMTP
| Схемы URI | |
|---|---|
| Официальные | aaa: aaas: acap: cap: cid: crid: data: dav: dict: dns: fax: file: ftp: go: gopher: h323: http: https: im: imap: ldap: mailto: mid: news: nfs: nntp: pop: pres: rtsp: sip: sips: snmp: tel: telnet: urn: wais: xmpp: |
| Неофициальные | about: aim: bolo: btc: bzr: callto: chrome: cvs: daap: ed2k: ed2kftp: feed: fish: git: gizmoproject: iax2: irc: ircs: lastfm: ldaps: magnet: mms: msnim: psyc: rsync: secondlife: skype: ssh: svn: sftp: smb: sms: soldat: steam: unreal: ut2004: view-source: vzochat: webcal: xfire: ymsgr: |
| Основные протоколы TCP/IP по уровням модели OSI (Список портов TCP и UDP) | |
|---|---|
| Физический | |
| Канальный | |
| Сетевой | |
| Транспортный | |
| Сеансовый | |
| Представления | |
| Прикладной | |
| Другие прикладные | |

