Что такое smtp простыми словами
Почтовая кухня #2: SMTP
SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи электронной почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
ESMTP (англ. Extended SMTP) — масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают ESMTP и его расширения.
Сразу отмечу, что в настоящее время SMTP в чистом виде практически не используется, т.к. он даже не поддерживает элементарно авторизацию… Используется ESMTP. Когда/если вы отправляете почту почтовым клиентом (Outlook, Thunderbird, Evolution, TheBat) происходит работа именно по этому протоколу.
Для работы по этому протоколу нужно соединиться с почтовым сервером по определенному порту и отправить некоторую последовательность ESMTP команд.
Команда представляет из себя строку вида
КОМАНДА[пробел]параметр(опционально)
В ответ на команду сервер возвращает строку вида
XXX[пробел]доп. информация
При этом XXX число в ответе сервера обозначает:
2ХХ — команда успешно выполнена
3XX — ожидаются дополнительные данные от клиента
4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время
5ХХ — неустранимая ошибка
Так вот, давайте перейдем ближе к делу — попробуем элементарно отправить e-mail из консоли через какой-нибудь почтовый сервер (не важно, линукс у вас или виндоус). Так будет проще познакомиться с этим протоколом — сразу на практике. Привожу комманды и параллельно объясняю их значение.
Для нашего эксперимента буду использовать почтовый сервер яндекса. Подразумевается, что уже есть там аккаунт…
Сразу предупреждаю, что после соединения все команды нужно вводить максимально быстро, т.к. при задержке около 15 секунд соединение автоматически разрывается. Рекомендую сперва все команды заранее набрать в текстовом редакторе а после просто вставлять их в командную строку.
telnet smtp.yandex.ru 2025 #соединяемся с smtp почтовым сервером. Адрес и порт smtp сервера можно посмотреть в инструкциях на сайте почтовика
Ответ:
Trying 213.180.204.38…
Connected to smtp.yandex.ru.
Escape character is ‘^]’.
220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Mon, 2 Feb 2009 13:47:22 +0300
Код 220 говорит об успешном соединении
EHLO [91.198.212.5] #Приветствуем сервер и отсылаем ему наш внешний IP (IP не обязательно отсылать, можно обойтись просто EHLO, но сервер скорее всего на это ругнется)
UPD: Желательно отправлять даже не IP а доменное имя для этого IP вродеEHLO you.provider.domain без квадратных скобок
Ответ:
250-smtp18.yandex.ru Hello 91.198.212.5
250-SIZE 20971520
250-8BITMIME
250-PIPELINING
250-CHUNKING
250-ENHANCEDSTATUSCODES
250-DSN
250-X-RCPTLIMIT 25
250-AUTH=LOGIN
250-AUTH LOGIN
250-STARTTLS
250 HELP
Сервер принял приветствие и выслал список поддерживаемых команд. Из этого списка нас интересует AUTH LOGIN. Это команда для авторизации на сервере по base64-закодированному логину и паролю. Так вот, нужно заранее подготовить закодированные в base64 пароль и логин от вашей почты. Можно это сделать, например, здесь seriyps.ru/crypt или командой в Linux echo [ваш пароль/логин] | base64
AUTH LOGIN # Сообщаем серверу о намерении пройти авторизацию
Ответ:
Этот самый VXNlcm5hbWU6 — закодированное в base64 слово “Username:”, а номер ответа 3ХХ означает, что сервер ждет от нас дополнительной информации. Не будем его огорчать:
ВАШ_ЛОГИН_ПОЧТЫ_В_BASE_64 #Отправляем ваш логин почты в base64, например dmFzaWFwdXBraW4=
Ответ:
Это, как можно догадаться, “Password:” в base64
ВАШ_ПАРОЛЬ_ПОЧТЫ_В_BASE_64 # Отправляем пароль почты в base64, например MTIzNDU2
Ответ:
т.е. авторизация прошла успешно. Теперь можно отправлять e-mail)
MAIL FROM: vasiapupkin@ya.ru # Сообщаем, что хотим отправить почту с адреса vasiapupkin@ya.ru Адрес может быть любым (в том числе с несуществующих доменов, однако он может проверяться при проверке на спам)
Ответ:
RCPT TO: billy@microsoft.com # Сообщаем, что хотим отправить письмо на адрес billy@microsoft.com
Ответ:
250 2.1.5 Recipient address syntax Ok; rcpt=
DATA # Здесь сообщаем, что начинаем передачу данных.
Ответ:
Т.е. сервер будет считывать введенные в консоли данные до того момента, пока мы не нажмем Энтер точка Энтер (после этой комбинации письмо сразу отправляется)
Два раза Энтер, затем вводим сам текст письма.
Hello, Billy! You’ll die tomorrow!
Энтер. Энтер # Сообщаем, что закончили передачу сообщения
Ответ:
250 2.0.0 accepted; S10436885AbZBBKvs
Т.е. сообщение принято для передачи
Теперь можно отправить еще какое-нибудь письмо (MAIL FROM: RCPT TO:) или завершить сеанс работы
QUIT # Завершаем сеанс
Ответ:
221 2.0.0 smtp18.yandex.ru Out
Connection closed by foreign host.
Это все. Как видно, протокол довольно простой, основные сложности — в формировании самого тела письма.
Конечно, здесь не приведена информация по отправке почты в кодировках текста, отличных от ASCII, не написано про вложенные файлы и MIME но если вам нужны подробности, вот несколько ссылок:
Электронная_почта Wiki
SMTP Wiki
MIME Wiki
rfc5321
При разработке приложений непосредственно с SMTP обычно работать не приходится, для этого используют различные фреймворки или стандартные функции. Для PHP можно посмотреть:
SMTP PEAR расширение
PHPMailer библиотека для работы с электронной почной
Удачных экспериментов!
Что такое SMTP-сервер, зачем нужен и как работает для массовых рассылок
SMTP — это протокол передачи почты (англ. Simple Mail Transfer Protocol). SMTP-сервер используется, когда надо отправить письмо с одной почты на другую.
Если вы изредка отправляете письма друзьям и коллегам через обычные почтовые интерфейсы Google, Mail.ru или Яндекс.Почта, то настройки SMTP не понадобятся: всё уже настроено и готово к использованию.
А если собираетесь заниматься почтовыми рассылками для клиентов, то пригодятся знания: как правильно настроить и использовать SMPT через почтовые клиенты, например, The Bat или Microsoft Outlook.
Зачем нужен SMTP-сервер
Чтобы рассылать письма без ограничений
Часто провайдеры устанавливают ограничения на количество отправляемых писем в сутки. Если ограничения нарушить, почтовый адрес попадает в чёрный список и заблокируется.
SMTP позволяет обходить лимиты и без рисков отправлять массовые рассылки по всей базе подписчиков.
Чтобы повысить доставляемость писем
SMTP-сервер отфильтровывает всё, что похоже на спам или вирусные сообщения, в исходящих сообщениях. Рассылка становится более «чистой», не блокируется и попадает у подписчиков в папку «Входящие».
Чтобы избежать утечки личных данных подписчиков
Данные подписчиков хранятся на сервере отправителя рассылки, а не на сервере SMTP. Через SMTP данные не могут быть похищены или выложены в общий доступ, ведь сервер их не сохраняет.
Чтобы анализировать, почему рассылка не доставлена
При отправке письма сервер присылает ответы — специальные команды. Они известны заранее, поэтому можно понять, почему письмо не было отправлено.
Например, есть команда-ответ, которая означает, что отправка письма невозможна, так как почтовый адрес отправителя занесён в чёрный список.
Чтобы сэкономит деньги на транзакционной рассылке
SMPT-сервер стоит дешевле, чем специальные сервисы email-рассылок. Хотя у SMPT нет возможностей создавать шаблоны, автоматические цепочки, лендинги и сайты, он полезен, когда нужно доставить много писем. Например, транзакционных, в которых не используются картинки, GIF и видео.
Недостатки SMTP-серверов
Отсутствие шифрования
Все письма, которые отправлены с сервера, могут быть перехвачены злоумышленниками и прочитаны. Можно частично защитить данные, если использовать команду STARTTLS в расширенной версии сервера.
Много спама на стороне отправителя
Сервер не имеет защиты от спама, поэтому почтовые ящики отправителя будут переполнены спамом. Его придётся удалять вручную, если сервер не использует внешние механизмы блокировки спама.
Доработка для корректной работы
Чтобы отправлять рассылку через SMTP-сервер без проблем, его надо дорабатывать: настраивать заголовки, исправлять ошибки. Если сервер купить или арендовать, доработкой займётся техническая поддержка. Если он создан своими силами, то нужно найти разработчика.
Какие бывают SMTP-серверы
Обычные
Обычные серверы используются для отправки личной почты. Они принадлежат провайдерам, хостингам или бесплатным почтовым клиентам.
Главный минус — ограничение на отправку писем. Обычно это дневной лимит. Если лимит превысить, рассылка попадёт в спам, а почтовый ящик может быть занесён в чёрный список.
Выделенные
Такие серверы можно купить, арендовать или создать собственные. Они подходят для массовых рассылок, так как не имеют ограничений. Можно отправить сколько угодно писем и не переживать, что почта будет заблокирована.
Как работает SMTP-сервер
SMTP — это комплекс из сервера, жёсткого диска, дополнительного оборудования и программного обеспечения. Сервер выступает в роли посредника между почтой отправителя и почтой получателя письма.
Во время отправки сообщения SMTP-сервер устанавливает связь с компьютером отправителем и компьютером-получателем через команды и ответы.
Команды и ответы: пример SMTP-сессии
Шаг 1. Подготовка к отправке
Отправитель: команда HELO. Используется, когда сервер почты отправителя связывается с сервером почты получателя.
Пример: HELO receiver.com
Получатель: ответ 250. В ответ сервер получателя должен прислать ответную команду, которая разрешит дальнейшие действия.
Пример: 250 sendeer.com
Шаг 2. Уведомление об отправке
Отправитель: команда MAIL FROM. Команда сообщает, от кого будет отправлено письмо.
Пример: MAIL FROM: sender@mail.com
Получатель: ответ 250 2.1.0 Ok. После проверки сервер почты получателя разрешает отправку с ящика отправителя. Если ящик в чёрном списке, придёт сообщение об ошибке.
Шаг 3. Выбор почты получателя
Отправитель: команда RCPT TO. Команда сообщает, на какой почтовый адрес будет отправлено письмо.
Пример: RCPT TO: receiver@mail.com
Получатель: ответ 250 2.1.0 Ok. Сервер согласен принять письмо для этого получателя.
Шаг 4. Передача письма
Отправитель: команда DATA. Сервер отправителя сообщает, что начинает передавать письмо.
Получатель: ответ 250 2.0.0 Ok. Сервер сообщает, что принял письмо. Ещё он назначит ему ID, по которому можно будет узнать, что стало с письмом, если оно не будет доставлено.
Пример: 250 2.0.0 Ok: queued as 1CD5PQ7ERT
Шаг 5. Завершение передачи
Отправитель: команда QUIT. Сервер отправителя сообщает, что передача завершена и сеанс закончен.
Получатель: ответ 221 2.0.0 Bye. Сервер получателя завершает сеанс.
Пример: 221 2.0.0 Bye
Как отправлять рассылку с использованием SMTP-сервера
Если почта заведена на бесплатном почтовом клиенте
Возможности
Вы уже используйте SMTP, если отправляете письма с бесплатных почтовых ящиков, например, Yandex, Google, Yahoo. Чтобы начать работу, необходимо авторизоваться в веб-интерфейсе почты через логин и пароль.
Недостатки
Бесплатные почтовые сервисы не подойдут для массовых рассылок.
Чтобы отправлять письмо, надо соблюдать лимиты. Если превысить лимиты, почтовый сервис заблокирует ящик. Например, Яндекс позволяет отправлять 500 писем в сутки с одного ящика.
Если почта заведена у интернет-провайдера
Возможности
Некоторые провайдеры вместе с услугами связи создают на своих доменах клиентам почтовые ящики. С ящиков также можно отправлять письма через SMTP.
Недостатки
Почта на домене провайдера не подойдёт для массовых рассылок.
Так как провайдеры разрешают клиентам отправлять письма с собственных IP-адресов, они не могут допустить, чтобы писем стало слишком много и их стали помечтать как спам. Поэтому устанавливают лимиты на ежедневную отправку писем.
Пример: как настроить SMTP-сервер на Яндекс.Почте в почтовом клиенте The Bat
Исходные данные
Обычно письма через почту Яндекс отправляют из веб-интерфейса. Но можно делать это и с помощью почтовых клиентов.
Почтовый клиент — это программа. Она работает на компьютере и на смартфоне.
Если у отправителя рассылки несколько почтовых ящиков на разных платформах, то почтовый клиент позволяет всех их объединить. Тогда отправка писем с этих ящиков будет происходить в одном месте — через интерфейс почтового клиента.
Рассмотрим, как отправлять письма через сервер SMTP с Яндекс.Почты, которая подключена в почтовом клиенте The Bat (можно скачать с официального сайта разработчика)
Настройка Яндекс.Почты
Зайдите в Яндекс.Почту и перейдите в настройки:
Открываем настройки
Далее кликнете по разделу «Почтовые программы»
Следующий шаг — переход в «Почтовые программы»
Выберите, по какому протоколу будет работать сервер:
Запустите почтовый клиент The Bat и создайте новый почтовый ящик.
Чтобы отправлять письма через сервер SMTP, нужно создать новый ящик
В окне укажите настройки:
Выбор протокола, имени и электронного адреса
В следующем окне выберите протокол, который ранее указали в Яндекс.Почта. Автоматически подтянутся настройки адреса сервера и порт.
Эти блоки заполняются автоматически
Подтвердите настройки на следующем шаге и не забудьте поставить галочку напротив настроек аутентификации:
Финальный шаг настройки SMTP в The Bat
Готово. Клиент настроен. Можно отправлять письма через сервер SMTP с Яндекс.Почты из интерфейса The Bat.
Стоит ли приобретать дополнительный SMTP-сервер для рассылки
Если нужны массовые рассылки, то использовать онлайн-сервисы и почтовые клиенты невозможно из-за лимитов. Чтобы отправлять письма без ограничений, нужно купить SMPT-сервер, арендовать или настроить самостоятельно. В первых двух случая сервер будет уже настроен или его настройкой займётся техническая поддержка продавца.
Вот цены одного из поставщиков услуг покупки и аренды сервера:
Пример стоимости покупки и аренды SMTP-сервера
Настройка собственного сервера дешевле и надёжнее, хотя справиться своими силами не всегда легко. Лучше доверить работу специалисту, который всё сделает как надо.
Что в итоге
Через SMTP-сервер нельзя отправлять письма с картинками и видео, зато он подойдёт, если необходимо делать массовые рассылки с текстом как, например, в триггерных письмах. Рассылка через SMTP дешевле, чем на специальных сервисах.
Настраивать SMTP-сервер не нужно, если отправляете письма прямо из веб-интерфейсов Google, Yahoo, Mail.ru и так далее — он работает автоматически. А если почта работает через почтовый клиент, например, The Bat, то настройка выполняется через пару кликов. Но какой бы вариант вы ни выбрали, всё равно придётся столкнуться с ежедневными лимитами на отправку писем.
Рассылать письма без ограничений можно, если купить готовый SMTP-сервер, арендовать или подключить собственный. Первые два метода проще, так как настройкой будет заниматься техническая поддержка, а последний — сложнее. Доверить работу лучше специалисту, который всё сделает быстро.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
SMTP (Simple Mail Transfer Protocol)
Уровень (по модели OSI): | Прикладной |
---|---|
Семейство: | стек протоколов TCP/IP |
Назначение протокола: | Отправка электронной почты |
Спецификация: | RFC 5321 |
Основные реализации (клиенты): | MUA (The Bat!, MS Outlook, MS Outlook Express, Mozilla Thunderbird, Claws Mail и др.) |
Основные реализации (серверы): | MTA (sendmail, postfix, OpenSMTPD, qmail, exim, Microsoft Exchange Server, MDaemon) |
Расширяемость: | Доп. команды (RFC 2449) |
Вступил в силу с: | 1982 |
SMTP (англ. Simple Mail Transfer Protocol ) – протокол передачи сообщений с компьютера на почтовый сервер для доставки конечному получателю. Этот протокол обеспечивает перенаправление почтовых сообщений (с помощью записей MX, или записей программы обмена электронной почтой, и записей А, или записей хоста в системе DNS), форматирование почтовых сообщений и установление сеансов между почтовыми клиентами и почтовыми серверами. В протоколе SMTP в качестве транспортного протокола обычно используется TCP, но могут применяться и другие протоколы, как определено в документе RFC 821.
Содержание
История
Данный протокол зародился в начале 70-х двадцатого века как стандарт, созданный с целью унификации систем связи различных компьютерных систем, которые не имели ничего общего между собой.
В 1971 г. появился Mail Box Protocol и SNDMSG, который был «изобретён» Рэем Томлинсоном из BBN Technologies для TOPS-20/TENEX-компьютеров, посылающих сообщения по ARPANET (в то время к ней были подсоединены менее 50 хостов). Данный протокол можно считать истоком протокола SMTP.
SMTP впервые был описан в RFC 821 (1982 год); последнее обновление в RFC 5321 (2008) включает масштабируемое расширение – ESMTP (англ. Extended SMTP). В настоящее время под «протоколом SMTP», как правило, подразумевают и его расширения. Протокол SMTP предназначен для передачи исходящей почты с использованием порта TCP 25.
Архитектура
Рисунок 1 – Схема взаимодействия по протоколу SMTP
Канал связи устанавливается непосредственно между отправителем и получателем сообщения. При таком взаимодействии почта достигает абонента в течении нескольких секунд после отправки. [Источник 1]
Принцип работы
Протокол SMTP не несет никакой ответственности за прием почты. Это означает, что в спецификации этого протокола не определены способы настройки почтовых ящиков для отдельных пользователей, а также не упоминаются какие-либо иные задачи (такие как аутентификация), которые должны быть решены при приеме электронной почты. В этой спецификации просто указано, как должна осуществляться передача электронной почты от отправителя к получателю.
Но в спецификации SMTP определен формат электронной почты и указано, какие наборы символов могут применяться в сообщениях электронной почты. Первоначально в спецификации SMTP было определено использование только 7-битовых символов ASCII. Но с появлением [MIME (Multipurpose Internet Mail Extensions)|стандарта многоцелевых почтовых расширений Internet (Multipurpose Internet Mail Extensions – MIME)]] и превращением Internet во всемирную сеть было предложено включить в дополнительные спецификации другие наборы символов. Благодаря этому в настоящее время электронное письмо может быть отправлено практически на любом национальном языке, а к письму могут прилагаться в закодированном виде данные почти любого типа, даже такие как изображения или исполняемые файлы. После внедрения всех этих дополнений протокол SMTP стал более сложным, но вместе с тем и более гибким.
Задачи
Обычный ответ SMTP сервера состоит из номера ответа, за которым через пробел следует дополнительный текст. Номер ответа служит индикатором состояния сервера. [Источник 2]
Команды
Каждая команда SMTP начинается с ключевого слова – названия команды. За ним могут следовать параметры, отделенные пробелом.
Регистр символов, используемых во всех названиях команд и, за редким исключением, в параметрах базового протокола SMTP, не имеет значения. Однако в некоторых элементах расширений строчные и прописные символы могут различаться. Необходимо также учитывать, что левая часть почтового адреса, до символа @, может быть регистрозависимой.
Конец строк в протоколе SMTP обозначается последовательностью символов «возврат каретки» (шестнадцатеричный код 0 D ) и «перевод строки» (шестнадцатеричный код 0А). Эта последовательность обозначается CRLF. Сервер начинает выполнение команды только получив от клиента строку, завершающуюся последовательностью CRLF.
Сервера SMTP должны принимать командные строки длинной до 512 символов. Это значение может быть увеличено по желанию разработчиков. Для серверов, поддерживающих расширения ESMTP, требующие дополнительных параметров, максимально допустимая длина командной строки увеличивается. Соответствующие требования приведены в RFC, описывающих эти расширения.
Если не используется расширение, позволяющее серверу принимать несколько команд подряд, клиент передает серверу следующую команду только после получения ответа на предыдущую.
Рассмотрим команды SMTP, необходимые для отправки сообщения.
EHLO (Расширенное HELO)
Диалог клиента и сервера, как правило, начинается с приветствия. В RFC 821 в качестве приветствия предлагалась команда HELO. Однако с введением расширений ESMTP, эта команда была заменена на EHLO. Использование расширений ESMTP возможно только после выполнения команды EHLO.
Передача почты возможна только после выполнения одной из двух названых команд. Другие команды, не связанные с передачей почты ( NOOP, HELP, EXPN, VRFY, RSET и QUIT ), в принципе могут быть исполнены и без приветствия.
В качестве аргумента клиент передает серверу свое полное доменное имя, если таковое имеется. Если клиент не имеет доменного имени, например, если в качестве клиента выступает MUA, установленный на компьютере, получающем адрес динамически, то в качестве аргумента передается адрес электронной почты отправителя. Желательно, чтоб полученная от клиента информация была исчерпывающей для его идентификации.
Сервер проверяет соответствие указанного клиентом в приветствии доменного имени его адресу IP. Результат проверки добавляется к заголовку письма, но диалог продолжается независимо от достоверности полученного сервером идентификатора.
В ответ на команду EHLO сервер присылает список, каждая строка которого содержит ключевое слово, соответствующее расширению, поддерживаемому вызываемым сервером, и, при необходимости, уточняющие параметры. Это единственный предусмотренный базовым протоколом SMTP ответ сервера, в котором клиентская программа должна проанализировать не только числовой код ответа, но и его текст. Из ответа на команду EHLO клиент узнает, какие дополнительные функции он может использовать при отправке сообщения.
Если устаревшее программное обеспечение сервера не поддерживает команду EHLO, то выдается сообщение об ошибке. В этом случае клиент должен попытаться повторить приветствие, используя команду HELO. Естественно, расширениями ESMTP уже не удастся воспользоваться.
HELO (Приветствие)
RFC 2821 рекомендует использовать команду HELO, только если программное обеспечение не поддерживает команду EHLO. Отличие этой команды только в том, что она делает невозможным использование расширений ESMTP.
В ответ на эту команду сервер сообщает, готов ли он к продолжению диалога.
MAIL (Отправитель)
Отправка электронного сообщения невозможна без успешного выполнения этой команды, для каждого письма команда MAIL должна быть выполнена только один раз.
Команда MAIL может быть выполнена только после успешного выполнения команды EHLO или H E LO.
С помощью этой команды серверу сообщается адрес отправителя письма. На этот адрес письмо должно вернуться в случае невозможности доставки. Если возврат не желателен, адрес может быть оставлен пустым: <>:
Обычно это бывает, если отправляемое сообщение уже и есть возвращаемое письмо. Это делается для того, чтобы избежать петли: письмо не может быть доставлено адресату и возвращается отправителю, но, если оно не может быть доставлено отправителю, то посылается обратно и так далее. Если же адрес отправителя не известен, то попытки вернуть его предприниматься не будут: в случае невозможности доставки получателю, письмо будет удалено.
Поскольку базовый протокол SMTP не предусматривает никакой авторизации отправителя, адрес отправителя может быть указан произвольно и не может считаться достоверным. В последние годы большинство MTA проверяют существование почтового домена отправителя и отвергают сообщения с адресами отправителей в несуществующих доменах. К сожалению, более детальная проверка возможна только при использовании дополнительных средств авторизации и обычно не применяется.
Базовый протокол SMTP не предусматривает дополнительных параметров для команды MAIL, но такие параметры использует ряд расширений ESMTP.
RCPT (Получатель)
Доставка сообщения возможна, только если указан хотя бы один доступный адрес получателя. Команда RCPT принимает в качестве аргумента только один адрес. Если нужно послать письмо большему числу адресатов, то команду RCPT следует повторять для каждого. Согласно RFC 2821, сервера SMTP должны быть готовы принять до ста команд RCPT на одно сообщение. Если письмо адресовано большему числу получателей, то для оставшихся клиент должен передать сообщение повторно. Максимальное число получателей может быть изменено администратором.
Команда RCPT может быть выполнена только после успешного выполнения команды MAIL.
Сервер анализирует каждый адрес и после каждой команды RCPT выдает сообщение, свидетельствующее о возможности или невозможности доставки письма по указанному адресу.
Базовый протокол SMTP не предусматривает дополнительных параметров для команды RCPT, но такие параметры использует ряд расширений ESMTP.
DATA (Текст сообщения)
C помощью этой команды серверу передается текст сообщения, состоящий из заголовка и отделенного от него пустой строкой тела сообщения.
Команда DATA может быть выполнена только после успешного выполнения хотя бы одной команды RCPT.
Команда DATA не требует никаких параметров и завершается последовательностью CRLF.
В ответ на правильно введенную команду DATA сервер сообщает о готовности к приему или об ошибке, если прием сообщения невозможен.
В случае положительного ответа сервера, клиент передает сообщение.
Передача заканчивается строкой, состоящей из одной точки. Эта строка не является частью сообщения и удаляется на приемной стороне. Чтобы исключить ложное срабатывание в случае, если сообщение содержит строку, состоящую из одной точки, на передающей стороне к началу каждой строки, начинающейся с точки, добавляется еще одна точка. На приемной стороне добавленные точки удаляются.
Распознав окончание сообщения, сервер должен принять решение о возможности или невозможности доставки и послать соответствующий ответ клиенту. Сделать это следует как можно быстрее, если нет явных свидетельств невозможности доставки сообщения, его рекомендуется принять, сообщив клиенту об успешном завершении операции. Если доставка в последствии окажется невозможна, следует просто отправить письмо обратно, сообщив в квитанции причину отказа. Это делается для того, чтобы избежать проблемы, описанной в RFC1047 : не дождавшись ответа сервера, клиент разрывает соединение, считая передачу закончившейся неудачей, хотя сервер, возможно, позже осуществил доставку. Через некоторое время клиент снова пытается послать то же самое сообщение, что может привести к многократной передаче одного и того же письма. На ожидание ответа после завершения отправки сообщения рекомендуется выделять не меньше десяти минут. На ожидание других ответов отводятся от двух до пяти минут.
Необходимо принимать строки сообщения длиной до 1000 символов, включая последовательность CRLF, но не включая точку, добавляемую в начало строки во избежание ложного обнаружения конца сообщения.
Минимальный размер письма, которое должен принимать сервер SMTP – 64 килобайта, включая как тело сообщения, так и его заголовок.
QUIT (Выход)
Командой QUIT клиент заканчивает диалог с сервером. Сервер посылает подтверждение и закрывает соединение. Получив это подтверждение, клиент тоже прекращает связь.
Перечисленных команд вполне достаточно для того, чтобы передать сообщение. Однако RFC 2821 предусматривает еще ряд команд, которые могут быть использованы в основном в процессе отладки сервера.
HELP (Помощь)
Если команда HELP вызывается без параметров, сервер посылает клиенту список доступных команд. Если в качестве параметра передано название команды, то клиенту посылается описание этой команды. Серверам SMTP рекомендуется поддерживать эту команду без параметров. Описание отдельных команд посылать не обязательно.
VRFY (Проверить), EXPN (Раскрыть)
Команда VRFY используется для проверки наличия указанного в качестве аргумента почтового ящика. В ответ сервер посылает информацию о владельце ящика или сообщение об ошибке, свидетельствующее о том, что указанный ящик не существует.
Если указанный адрес указывает на несколько почтовых ящиков, команда VRFY возвращает список пользователей, внесенных в соответствующую рассылку, либо сообщение об ошибке, свидетельствующее о неоднозначности ответа на полученный запрос.
Для получения адресов, внесенных в список рассылки, используется команда EXPN.
Используя эти команду, злоумышленники могут получить список адресов пользователей сервера.
Обе команды могут быть полезны в процессе отладки сервера, потому они, как правило, поддерживаются. Но на серверах, используемых в реальном окружении, их обычно отключают. Возможен также вариант, при котором вызов команд возможен, но они проверяют только синтаксическую верность адреса.
Согласно RFC 821, команды VRFY и EXPN не являются обязательными. Поэтому, если сервер их поддерживает, они должны быть перечислены в ответе сервера на команду EHLO, как расширения ESMTP.
NOOP (Пустая команда)
В ответ на команду NOOP сервер посылает подтверждение выполнения. Никаких действий на сервере не производится, параметры команды игнорируются.
RSET (Сброс)
Команда RSET аннулирует все переданные до нее на сервер данные. Процесс передачи сообщения следует начать заново.
Перечисленные команды используются вместо команды MAIL для передачи сообщения на терминал получателя (SEND) или в его почтовый ящик, если пользователь не активен или запретил прием сообщений ( SOML ) или и на терминал, и в почтовый ящик (SAML).
Описанные в RFC 821 устаревшими. Если их все же используют, то они должны быть перечислены в ответе на команду EHLO, как расширения ESMTP.
TURN (Смена направления передачи)
Эта команда предназначена для почтовых серверов, не имеющих постоянного соединения с сетью. Они должны периодически, обычно по телефонной сети, соединяться с серверами, выполняющими функции промежуточных хранилищ сообщений, и забирать накопившуюся почту. Поскольку протокол SMTP предусматривает отправку сообщений только от клиента к серверу, для передачи в обратном направлении им необходимо поменяться ролями.
Команда TURN представляет потенциальную опасность, так как она может быть использована для перехвата чужой почты. Потому RFC 2821 категорически не рекомендует ее использовать. Хорошими альтернативами команде TURN являются расширения ESMTP ETRN и ATRN, рассматриваемые ниже.
Ответы сервера SMTP
На каждую команду клиента сервер посылает ответ, состоящий из числового кода и отделенной от него пробелом текстовой строки.
В большинстве случаев для правильной интерпретации ответа клиенту достаточно числового кода. Текстовая строка нужна для интерпретации ответа человеком. Исключение составляет ответ на команду EHLO, содержащий список расширений ESMTP, поддерживаемых сервером, а так же ответы на некоторые команды ESMTP.
Согласно RFC 2821, код ответа состоит из трех цифр. Первая цифра кода может принимать следующие значения:
Предварительный положительный результат. Команда принята, но для ее выполнения сервер ожидает реакции клиента на посылаемую в этом ответе информацию. Клиент должен послать следующую команду для продолжения работы. В базовом протоколе SMTP не предусмотрено команд, требующих ответов такого типа.
Вторая цифра может принимать следующие значения:
Если ответ состоит из нескольких строк, то каждая из них начинается числовым кодом, который отделяется от сопровождающего текста не пробелом, а символом «минус» (-). В последней строке цифровой код отделяется от текста пробелом. Каждая строка ответа заканчивается последовательностью CRLF.
В таблице ниже собраны ответы, предусмотренные для команд SMTP.
Код | Расшифровка | Команды |
---|---|---|
211 | Состояние системы | HELP |
214 | Информация об использовании команд | HELP |
220 | Готовность к работе | Установление соединения |
221 | Канал передачи закрыт | QUIT |
250 | Команда выполнена успешно | EHLO, HELO, MAIL, RCPT DATA, RSET, VRFY, EXPN, NOOP |
251 | Почта для данного пользователя переадресована и будет доставлена по новому адресу | RCPT, VRFY |
252 | Команда не будет выполнена, но доставка сообщения возможна. Ответ свидетельствует о том, что выполнение команд заблокировано из соображений безопасности, и не может быть интерпретирован как информация об опрашиваемом почтовом ящике | VRFY, EXPN |
354 | Команда DATA принята, ожидается текст сообщения, заканчивающийся строкой, состоящей из одной точки | DATA |
421 | Служба недоступна, связь прекращается. Ответ выдается при прекращении работы сервера во время сеанса связи | Любая |
450 | Доставка сообщения в данный момент не возможна: почтовый ящик не доступен | RCPT |
451 | Выполнение команды прервано: ошибка сервера | MAIL, RCPT, DATA |
452 | Команда не выполнена: недостаточно памяти | MAIL, RCPT, DATA |
500 | Синтаксическая ошибка, команда не понята (возможно, превышена допустимая длина строки) | Несуществующая команда |
501 | Синтаксическая ошибка в параметрах или аргументах (например, использование параметров в командах, не допускающих параметров) | Любая |
502 | Команда не поддерживается (отключена администратором) | VRFY, EXPN, HELP |
503 | Неправильный порядок команд | MAIL, RCPT, DATA |
504 | Параметр команды не поддерживается | EHLO, HELO, VRFY, EXPN, HELP |
550 | Команда не выполнена: почтовый ящик недоступен (не найден, доступ запрещен, выполнение команды запрещено администратором) | EHLO, HELO, MAIL, RCPT, VRFY, EXPN |
551 | Адрес пользователя изменился | RCPT, VRFY |
552 | Выполнение команды прервано: превышен выделенный объем памяти | MAIL, RCPT, DATA |
553 | Неправильный синтаксис адреса | MAIL, RCPT, VRFY |
554 | Служба SMTP на вызываемой машине не запущена | Установление соединения |
554 | Доставка не может быть осуществлена ни по одному адресу D | ATA |
В случае переадресации почты допускается также использование ответа 250. В этом случае клиент о переадресации не информируется. Сервер может также отказать в приеме почты для уже не существующего пользователя и послать ответ 551 с указанием нового адреса или ответ 550. [Источник 3]