Почему это важно
Практическое пояснение: совпадение адресов конверта с From и To не требуется. При разборе журнала нужно сохранять ответы на каждый RCPT и отличать принятого адресата от уже доставленного письма.
Что подтверждено
Объект SMTP состоит из конверта и содержимого. Адреса MAIL FROM и RCPT TO не обязаны совпадать с адресами заголовков From, To или Cc; промежуточный SMTP-сервер не должен выводить конечный маршрут из заголовков письма.
Граница применимости: RFC 5321, октябрь 2008 года; §§2.3.1, 7.2; приложение C, стр. 11, 12, 76, 87. Правило относится к SMTP-передаче с готовым конвертом. Отдельный случай его построения при первоначальной подаче разобран в приложении B, стр. 85–86.
MAIL начинает новую почтовую транзакцию, очищает буферы прежнего обратного пути, получателей и данных и записывает новый обратный путь. Клиент не должен посылать MAIL, пока предыдущая транзакция ещё открыта.
Граница применимости: RFC 5321, октябрь 2008 года; §§3.3, 4.1.1.2, 4.1.4, стр. 19, 34, 45. Предыдущую транзакцию сначала завершают или отменяют. Новый MAIL не заменяет предусмотренный сброс открытой транзакции.
Каждый RCPT TO задаёт одного получателя. Успешный RCPT добавляет его в буфер адресатов; отказ одному адресату сам по себе не отменяет уже принятых других. В примере RFC после одного 550 передача продолжается для двух получателей с ответом 250.
Граница применимости: RFC 5321, октябрь 2008 года; §§3.3, 4.1.1.3; приложение D.1, стр. 19, 20, 35, 88. Пример описывает отдельные ответы RCPT и последующее успешное DATA. Он не отменяет право клиента прервать ещё открытую транзакцию.
Некоторые SMTP-серверы откладывают проверку адресатов до получения содержимого; relay может не иметь доступа к конечной системе. Поэтому положительный ответ RCPT не доказывает окончательную доставку или полную проверку ящика в реальном времени.
Граница применимости: RFC 5321, октябрь 2008 года; §§3.3, 6.1, 7.3, стр. 21, 72, 77. Отдельная успешная команда не равна приёму всей транзакции. Требования к проверке VRFY не переносятся на RCPT.
RSET отменяет текущую транзакцию: сервер должен удалить сохранённые сведения об отправителе, получателях и данных, ответить 250 и оставить соединение открытым. NOOP лишь запрашивает ответ 250 и не очищает эти буферы.
Граница применимости: RFC 5321, октябрь 2008 года; §§4.1.1.5, 4.1.1.9, стр. 38, 40. Речь о командах, распознаваемых как SMTP-команды, а не о строках внутри DATA. После подтверждённого конца DATA RSET уже не отменяет завершённую передачу.
SMTP должен сохранять регистр локальной части адреса: принимающий домен может различать smith и Smith, хотя такое устройство ящиков не рекомендуется. Доменная часть регистронезависима; для специального имени Postmaster действует отдельное регистронезависимое правило.
Граница применимости: RFC 5321, октябрь 2008 года; §§2.4, 4.1.1.3, стр. 16, 36. Из требования сохранить регистр не следует, что каждый сервер обязательно различает такие ящики. Политику конкретного домена проверяют отдельно.
При обычной ошибке доставки уже принятого письма уведомление направляют на обратный адрес его конверта, а само уведомление отправляют с пустым обратным путём MAIL FROM. Если исходный обратный путь пуст, сообщение о недоставке отправлять запрещено.
Граница применимости: RFC 5321, октябрь 2008 года; §§3.6.3, 6.1, стр. 27, 28, 71, 72. Общий случай доставки; специальные решения о враждебной почте обсуждаются в §§6.2, 7.8–7.9. Пустой путь не заменяют адресом заголовка From.
Что проверить
- Сохраняйте MAIL FROM и каждый RCPT TO отдельно от заголовков From, To и Cc.
- Перед новым MAIL завершите или отмените открытую транзакцию.
- Сопоставьте каждого адресата с его собственным кодом RCPT.
- Проверьте, на каком этапе система действительно проверяет ящик.
- Для отмены ожидающей транзакции проверьте RSET и очистку всех трёх буферов.
- Сохраняйте регистр локальной части адреса и отдельно учитывайте правило Postmaster.
- Для уведомлений проверьте адрес назначения, пустой MAIL FROM и защиту от ответов на ошибки.
Первоисточники
Simple Mail Transfer Protocol
Internet Engineering Task Force · RFC 5321, October 2008
Полная локальная копия RFC 5321, октябрь 2008: прочитаны все 95 страниц, включая приложения A–F, 09.09.2026. Сверены конверт, DATA, ответственность, повторы и выбор MX. retrieved_on сохраняет дату офлайн-очереди. Позднейшие errata, расширения и реализации не проверялись.
Открыть первоисточник