Команды SMTP в Linux

Команды SMTP в Linux

    SMTP

    dns сервер клиента определяет по записи mx на какой сервер отсылать электронную почту
    После того как клиент определит адрес сервер получателя, он устанавливает smtp соединение
    После установления сеанса TCP сервер SMTP посылает клиенту специальное сообщение об установке соединения
    Дальше соединением управляет клиент, отправляя команды на которые сервер должен ответить
    Формат команд в SMTP:
    command [parameter]
    command 4-x символьная команда
    Число, с которого начинается ответ, является трехзначным кодом ответа. Этот код может использоваться при поиске и устранении неполадок в работе электронной почты.
    Основные команды SMTP:
    HELO Открывает приглашение от клиента
    MAIL Определяет отправителя сообщения
    RCPT Определяет получателей сообщения
    DATA Определяет начало сообщения
    SEND Посылает сообщение на терминал
    SOML Send-or-Mail
    SAML Send-and-Mail
    RSET Сброс SMTP-соединения
    VRFY Проверяет имя пользователя системы
    EXPN Запрашивает список псевдонимов
    HELP Запрашивает список команд
    NOOP No operation — Ничего не делать
    QUIT Остановить сеанс SMTP
    TURN Реверс ролей в SMTP (клиент становится сервером)


    С помощью команды HELO клиент представляется серверу и если сервер отвечает положительным ответом 250, это означает что сервер готов отвечать на команды
    В настоящее время данная команда используется формально. Почтовый сервер старается идентифицировать клиента с помощью механизма обратного преобразования DNS с целью определения действительности имени хоста клиента по его ip адресу
    Команда HELO объявляет в качестве клиента имя локального хоста, а не реального пользователя, отославшего сообщение
    Как правильно почтовый сервер smtp отказывает в соединении если IP адрес хоста клиента не преобразуется в соответствующее имя данного хоста
    Команда MAIL используется для организации сеанса обмена электронной почтой с сервером после команды HELO, указывает на отправителя сообщения, синтаксис следующий:
    MAIL reverse-path
    Аргумент reverse-path определяет отправителя сообщения и указывает обратный маршрут по которому нужно вернуть ответ в случае невозможности его доставки
    В реальном запросе это будет выглядеть так:
    MAIL FROM: tolik@netbash.ru
    Если почтовое сообщение проходило на пути от отправителя к получателю через несколько узлов, то каждый из них будет добавлять сведения о себе в поле <reverse-path>, для обнаружения почтовых серверов, которые пытаются скрыть свою принадлежность, посылая сообщения через неизвестные серверы SMTP
    Команда RCPT определяет получателя сообщений, есть возможность укзать несколько получателей
    RCPT TO: nameuser //Если сервер smtp локальный
    RCPT TO: nameuser@mail.ru
    Если почтовый сервер не находит у себя имя получателя, тогде возможны несколько вариантов возможных событий:
    1. Сервер может переслать полученное сообщение дальше, отправив утвердительный ответ отправителю, при этом он добавляет свое имя в поле reverse-path, т.е. включает себя в маршрут прохождения
    2. Хост не может переслать сообщение, о чем сообщает отправителю
    Команда DATA используется для передачи информации в сообщении:
    Программа-клиент обозначает конец сообщения посредством передачи строки с одной точкой:
    DATA 'hello world' .
    Приняв эту последовательность, сервер SMTP "понимает", что передача сообщения закончена и следует вернуть код ответа, который оповестит клиента о том, что его сообщение принято.
    Команда SEND используется для передачи сообщения непосредственно на терминал пользователя системы. Выполняется если пользователь находится в системе.
    Команда SOML играет роль SEND и MAIL. Если пользователь подключен к системе тогда команда будет работать как команда SEND, в противном случае как команда MAIL
    Команда SAML также как и SOML играет роль SEND и MAIL, но в отличии от SOML одновременно отправляет письмо на терминал пользователя и в его ящик
    Команды SAML и SOML не поддерживаются многими версиями SMTP так как небезопасны
    Команда RSET значит reset, возвращает сеанс к начальной точке ( HELO )
    Команда VRFY значит verify, определяет возможность доставки сообщения определенному пользователю перед выполнением команды RCPT
    VRFY tolik@netbash.ru
    Команда EXPN эффективен когда с одного адреса требуется послать большое количество одинаковых сообщений группам пользователей
    EXPN mail-list
    Команда NOOP ( no operation ), просто проверяет соединение без пересылки сообщения
    Команда TURN используется для двухстороннего общения с сервером, что не безопасно, поэтому не факт, что каманда будет работать у клиента
    Часто появление ошибок типа 500, 502 и 504 может быть вызвано попыткой выполнения команд из расширений протокола SMTP, которые не поддерживаются более старыми версиями программ на сервере SMTP.

    Код ответ SMTP сервера

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

    Формат сообщения SMTP

    Сообщение разбивается на две части, заголовок и тело, должны разделяться пустой строкой
    Поля заголовка могут располагаться в произвольном порядке
    Received:
    Return-Path:
    Reply-To:
    From:
    Date:
    To:
    *********************** Message body


    Заголовок Received используется для идентификации SMTP серверов, которые принимают участие в процессе доставки, т.е. каждый сервер добавляет свое поле в заголовок Received ( путь, протокол, название хоста )
    Формат поля заголовка Received: (Принято:) следующий: Received:
    from host name
    by host name
    via physical-path
    with protocol
    id message-id
    for final e-mail destinationj
    Поле заголовка Return-Path
    Последний smtp сервер в цепочке добавляет значение для этого поля, определяет маршрут посредством которого сообщение достигло получателя
    Если сообщение было отправлено на прямую, будет указан один сервер, в противном случае вся цепочка
    Формат этого поля заголовка следующий:
    Return-Path: route
    В поле Originator указывается адрес отправителя
    Reply-To: address
    Поле заголовка Resent идентифицирует почтовое сообщение, которое должно было отсылаться повторно
    Resent-Reply-To:
    address
    Authentic идентифицируют в своем поле отправителя электронного сообщения
    в действительности требуется только одно из этих полей:
    From: user-name
    Sender: user-name
    Resent-authentic определяют отправителя сообщения, которое по какой-либо причине повторно передавалось программой-клиентом
    Resent-From: date-time
    Resent-Sender: date-time
    Поля заголовка Dates используются для помещения метки времени в сообщение при передаче его от клиента серверу
    Date: date-time
    Resent-Date: date-time
    В полях заголовка Destination указываются адреса электронной почты получателей сообщения, является информационным, реальное значение помещается в команду RCPT
    В поле CC помещаются получатели, которые должны получить копию сообщения
    В поле BCC помещается невидимая копия, адрес получателя, который не виден посторонним
    To: address
    Resent-To: address
    CC: address
    Resent-CC: address
    BCC: address
    Resent-BCC: address
    Необязательные поля заголовка:
    Message-ID: message-id
    Resent-Message-ID: message-id
    In-Reply-To: message-id
    References: message-id
    Keywords: text - list
    Subject: text
    Comments: text
    Encrypted: word
    Subject: Тема
    Message-ID: Идентификатор сообщения
    Encrypted: указывает, подверглось ли сообщение шифрованию
    Keywords: ключевые слова в сообщении
    Источник: intuit.ru

    Двоичные данные и MIME

    DATA разрешает ввод только текстовых данных в формате ASCII
    Программа-клиент до передачи сообщения программе SMTP конвертирует двоичные данные сообщения в текстовый формат ASCII. Почтовая программа у получателя делает обратное преобразование текста в формате ASCII в двоичные данные
    Если принят двоичный файл, закодированный с помощью uuencode, его можно раскодировать с помощью uudecode обратно в двоичный файл
    В документах RFC 2045 и 2046 описывается формат многоцелевых расширений для электронной почты в Internet (Multipurpose Internet Mail Extensions — MIME). Алгоритм кодирования MIME намного надежней uuencode. В нем учитывается тип двоичного файла, подвергающегося преобразованию, а также передается дополнительная информация о файле для декодера. Алгоритм MIME позволяет помещать двоичные данные напрямую в стандартное почтовое сообщение, согласно RFC 822. Для описания двоичных данных, вкладываемых в сообщение формата RFC 822, были созданы пять новых полей заголовка. Источник: intuit.ru
    MIME header
    Message header
    MIME body


    Mime version - версия MIME которую использовал отправитель
    Content-Transfer-Encoding указывается способ помещения двоичных данных в сообщение текстового формата ASCII.
    Content-ID используется для идентификации сеансов MIME
    Content-Description используется для текстового описания в формате ASCII данных
    Content-Type идентифицирует данные, заключенные в MIME-сообщение ( text, plain, enriched, message, partial, external-body, image, video, audio, application, multipart, alternative)
    Источник: intuit.ru

    Extended SMTP

    Команда HELO заменена на команду приглашения — EHLO, получение сервером SMTP такой команды означает, что клиент может посылать ему расширенные SMTP команды
    Одна из новых групп команд называется параметрами уведомления о доставке сообщения (Delivery Status Notification). Эти параметры могут использоваться с командами MAIL и RCPT для отображения состояния доставки определенного сообщения электронной почты.
    Команда ETRN позволяет SMTP-клиенту выдавать запрос на SMTP-сервер для того, чтобы инициировать еще одно SMTP-соединение с клиентом для передачи ему сообщений. Единственное отличие команды ETRN от TURN заключается в том, что запрос поступает не на использование существующего соединения, а на открытие нового сеанса SMTP.
    Источник: intuit.ru


    Использование openssl

    Для авторизации отправителя необходимо сгенерировать логин и пароль в специальном формате base64

    echo -ne "mmegatest@yandex.ru" | base64 echo -ne "password" | base64 #Альтернативный вариант для AUTH PLAIN echo -ne "\0username\0password" | base64

    Далее используем их для авторизации отправителя, после соединения с сервером smtp.yandex.ru

    #Для startls #openssl s_client -starttls smtp -connect smtp.yandex.ru:587 #Для openssl #openssl s_client -connect smtp.yandex.ru:465 #Пример openssl s_client -starttls smtp -connect smtp.mail.ru:587 ........ ......... ....... --- 250 STARTTLS EHLO localhost 250-smtp35.i.mail.ru 250-SIZE 73400320 250-8BITMIME 250-PIPELINING 250-DSN 250 AUTH PLAIN LOGIN XOAUTH2 AUTH PLAIN 334 AG1lZ2FwbGFuQG0Q3WmZXa0Jpb2VHZ2FwbGFuQG0Q3WmZXa0Jpb2JhZGUucnUAQkttcjZocGltRlKdWk= 235 Authentication succeeded mail from: megauser@mail.ru 250 OK rcpt to: mmegatest@yandex.ru 250 Accepted data 354 Enter message, ending with "." on a line by itself subject: test test test test . 250 OK id=1pSiK7-005XCM-94 quit 221 smtp35.i.mail.ru closing connection closed

    Если ваше имя пользователя или пароль в формате base64 начинаются с заглавной буквы "Q", open ssl вернет DONE .
    Аналогично, если они начинаются с "R", соединение будет ПЕРЕСМОТРЕНО.
    В таком случае можно попробовать сгенерировать новый логин или пароль или использовать AUTH PLAIN ( одна строка )


    Источники
    Последнее изменение: 10.10.2024 05:19


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ