Протокол SMTP

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

SMTP обеспечивает механизм передачи электронной почты: напрямую с сервера отправителя на сервер получателя (когда оба подключены к одной и той же транспортной системе) или через один или несколько прокси-серверов SMTP, в противном случае. Впервые определенный в RFC 821 в 1982 году, он был обновлен в 2008 году расширенными надстройками SMTP в RFC 5321, который является широко используемым протоколом и по сей день. 

Номера портов сервера:

  • SMTP - 25
  • SMTP - 465

Предшественником SMTP была программа SNDMSG (Send Message), которую в 1971 году использовал Рэй Томлинсон (в сочетании с его собственным проектом - CYPNET) для создания приложения, позволяющего отправлять электронную почту в сети ARPA-NET. Год спустя программа, используемая в Arpanet для передачи файлов - FTP , была расширена командами MAIL и MLFL. Почта отправлялась через FTP до 1980 года - тогда был создан первый стандарт протокола электронной почты - MTP (Mail Transfer Protocol). MTP несколько раз модифицировался, и в 1982 году Джонатан Б. Постел описал простой протокол передачи почты.

Как работает протокол SMTP?

SMTP - это стандартный протокол сетевой передачи почты. Его работа довольно проста и сводится к пяти простым шагам. Вы можете отправить сообщение электронной почты из любого почтового клиента: Outlook, Thunderbird, Roundcube, Gmail или любого другого клиента. Конечно, ваша электронная почта может быть отправлена ​​как через почтовую программу, установленную на вашем компьютере, так и через почтовые веб-клиенты.

Простой протокол передачи почты работает путем инициализации почтовой службы для установления двустороннего соединения между отправляющим SMTP-сервером и получающим SMTP-сервером. Отправляющий SMTP-сервер отправляет команды, на которые отвечает принимающий сервер. Как только канал передачи установлен с использованием соответствующих команд, отправляющий сервер отправляет команду MAIL, которая указывает сообщение, которое должно быть отправлено.

Если принимающий сервер получает сообщение, он отправляет команду OK. После получения этой команды отправляющий сервер отправляет команду RCPT, которая идентифицирует получателя почты. Если идентификация прошла успешно, принимающий SMTP-сервер отправляет ответ с командой OK .

Чтобы иметь возможность отправить сообщение через почтовый сервер SMTP, принимающий сервер должен получить информацию об имени сервера отправителя и имени его почтового ящика. Для этой цели в команде MAIL разрешен путь возврата, в котором указан адрес отправителя.

В дополнение к процедуре MAIL , в которой можно использовать команды MAIL, RCPT и DATA (сообщение для отправки), протокол SMTP также позволяет выполнять процедуры перенаправления, а также проверять и расширять список адресатов.

Команды SMTP

Команды представляют собой строки символов, за   которыми следует непечатаемый символ <CRLF>. Некоторые из них кратко охарактеризованы ниже.

  • HELLO (HELO) - эта команда используется для идентификации отправителя SMTP для получателя SMTP. Эта команда вместе с ответом ОК означает, что отправитель и получатель готовы к сотрудничеству. (оба находятся в исходном состоянии)
  • MAIL (MAIL) - эта команда инициирует состояние транзакции, в котором почтовые данные доставляются в один или несколько почтовых ящиков пользователей.
  • RECIPIENT (RCPT) - эта команда используется для определения получателя почтовых данных. Несколько получателей означают многократное использование этой команды.
  • DATA - Эта команда указывает начальную точку почтового сообщения пользователя. Это заставляет данные из этой инструкции добавляться в почтовый буфер данного принимающего сервера. Почтовые данные могут состоять из 128 символов ASCII. Инструкция заканчивается символом «<CRLF>. <CRLF>».
  • SEND (SEND) - аналогична команде MAIL, но доступна только терминалам, напрямую подключенным к почтовому серверу.
  • SEND OR MAIL (SOML) - отправляет сообщения на терминалы, а также в почтовые ящики пользователей. Успешно завершено, когда сообщение было доставлено в почтовый ящик получателя.
  • RESET (RSET) - эта команда используется для прерывания состояния передачи почты - буферы очищаются и все почтовое сообщение отменяется. Для успеха получатель должен ответить OK.
  • VERIFY (VRFY) - верификация пользователя. Сервер возвращает имя пользователя и имя его почтового ящика.
  • EXPAND (EXPN) - очень похоже на VERIFY, но позволяет идентифицировать список пользователей.
  • HELP (HELP) - помощь Аргументом этой команды является имя команды, по которой мы хотим получить дополнительную информацию.
  • NOOP (NOOP) - после выдачи этой команды получатель отправляет только ответ OK. это как убедиться, что соединение не разорвано и что сервер ждет наших действий.
  • QUIT (QUIT) - заставляет получатель отправить ответ ОК. и закрытие соединения.
  • TURN (TURN) - эта команда требует, чтобы получатель либо отправил ответ с подтверждением ОК. и взять на себя роль отправителя или отправить отрицательный ответ и продолжить действовать как получатель

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

Так выглядят отдельные команды SMTP:

HELO <SP> <domena> <CRLF>

MAIL <SP> FROM:<reverse-path> <CRLF>

RCPT <SP> TO:<forward-path> <CRLF>

DATA <CRLF>

RSET <CRLF>

SEND <SP> FROM:<reverse-path> <CRLF>

SOML <SP> FROM:<reverse-path> <CRLF>

SAML <SP> FROM:<reverse-path> <CRLF>

VRFY <SP> <string> <CRLF>

EXPN <SP> <string> <CRLF>

HELP [<SP> <string>] <CRLF>

NOOP <CRLF>

QUIT <CRLF>

TURN <CRLF>

Коды ответов SMTP

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

Если материал понравился Вам и оказался для Вас полезным, поделитесь им со своими друзьями!

Читать по теме
Интересные статьи