Правильное использование заголовка SMTP «Отправитель»?

20

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

ОТ: author@example.com
TO: receient@example.com
ОТПРАВИТЬ: webapp@mycompany.com

Мы решили использовать адрес электронной почты автора в заголовке FROM, чтобы обеспечить наилучший опыт для получателя; когда они видят сообщение в своем почтовом клиенте, автор понятен. Чтобы избежать появления спуфинга, мы добавили заголовок SENDER (с адресом электронной почты собственной компании), чтобы было ясно, что мы отправили сообщение от имени автора. После прочтения RFC 822 и 2822, это, кажется, предполагаемое использование заголовка отправителя.

Большинство принимающих почтовых серверов, кажется, справляются с этим хорошо; сообщение электронной почты доставляется нормально (при условии, что почтовый ящик получателя существует, не превышена квота и т. д.). Однако при отправке сообщения ОТ адреса в домене ДО адреса в том же домене некоторые принимающие домены отклоняют сообщения с ответом, например:

571 неверный IP - psmtp (в ответ на команду RCPT TO)

Я думаю, это означает, что принимающий сервер видел только то, что адрес заголовка FROM находился в его собственном домене, и что сообщение было отправлено с сервера, который он не считал авторизованным для отправки сообщений для этого домена. Другими словами, принимающий сервер игнорировал заголовок SENDER.

У нас есть обходной путь: веб-приложение хранит список таких доменов, которые, похоже, игнорируют заголовок SENDER, а когда заголовки FROM и TO находятся в таком домене, вместо этого он устанавливает заголовок FROM на наш собственный адрес электронной почты. Но этот список требует обслуживания.

Есть ли лучший способ достичь желаемого опыта? Мы хотели бы быть «добропорядочным гражданином» сети, и все вовлеченные стороны - отправители и получатели - хотят участвовать и получать эти сообщения. Один из вариантов - всегда использовать адрес электронной почты нашей компании в заголовке ОТ и добавлять имя / адрес автора к теме, но это кажется немного неуклюжим.

Эрик Рат
источник
Почему бы не использовать From: authorвместо From: author@example.com?
Pacerier

Ответы:

16

Вы смотрите на неправильные вещи. Это заголовки сообщений . Вы должны смотреть на конверт SMTP . (То, как указан конверт, зависит от того, как именно ваше приложение отправляет почту в почтовую систему. Во многих системах конверт задается аргументами командной строки для служебной программы отправки почты.) В зависимости от того, когда именно в транзакции протокола он решает выдать этот 571 ответ, сервер ретрансляции SMTP, возможно, даже не видел заголовки сообщений вообще.

В тексте ответа говорится, что администратор данного конкретного сервера ретрансляции SMTP ограничил то, что вы можете поместить в конверт SMTP. Похоже, что он жалуется на часть получателя конверта. Но это может быть отсрочка проверки отправителя конверта до указания первого получателя, поэтому он может жаловаться на отправителя.

Обратите внимание, что отправитель конвертов - это то место, куда отправляются сообщения о состоянии доставки, и вы не захотите, чтобы они направлялись случайным людям по всему миру. (Помимо того, что многим это не нравится, нет смысла возвращать сообщения о состоянии доставки вашей почты кому-либо, кроме вас.) Укажите себя в качестве отправителя конверта.

Между MXпрочим, неправильно требовать записи ресурсов. Сервер ретрансляции SMTP может быть расположен Aи AAAAзаписи ресурсов при отсутствии каких-либо MXзаписей ресурсов. См. RFC 5321 § 5.1.

JdeBP
источник
Я проверил RFC перед реализацией проверки записи MX и узнал то же самое: проверил запасную запись A при отсутствии записи MX. Я посмотрю в конверт SMTP; спасибо за предложение.
Эрик Рат
Я исследовал конверт SMTP, проверил это. Вы правы - я неправильно предположил, что во всех проверках происхождения будет использоваться заголовок сообщения «От», но похоже, что вместо него используется конверт.
Эрик Рат
5

Я могу ошибаться, но наиболее вероятной причиной вышеуказанной ошибки, особенно в случае Postini, является то, что домены, на которые вы получаете отклонение, имеют строгую политику SPF. Большинство почтовых серверов с проверкой SPF проверяют только заголовок From: они не заботятся о заголовке Sender.

Чтобы проверить, так ли это, запустите «dig + short TXT domain.com», где domain.com - это то, что выдает сообщение об ошибке. Вы должны получить что-то вроде:

"v = spf1 mx -all"

Важной частью является все. Это означает, что владелец домена заявил, что он будет когда-либо отправлять электронную почту только с серверов, которые действуют как их почтовые серверы, все остальные сообщения будут отклонены.

К счастью, если это так, вы можете активно проверить это перед отправкой электронного письма! Получить WebApp, чтобы сделать проверку SPF, когда пользователь вводит свой адрес электронной почты. Если существует строгая политика, добавьте домен в свой список. Нет недостатка в библиотеках для всех языков, которые могут выполнять проверки SPF.

Найл Донеган
источник
Спасибо, это хорошая идея. Я проверил (с помощью dig) несколько доменов, которые уже представили нежелательное поведение, и у пары действительно были записи SPF со всеми. Так что это не полное решение, но я думаю, что будет трудно найти полное решение этой проблемы. Я думаю, что другие применяют ту же базовую логику, но без сохранения / публикации информации в записях SPF.
Эрик Рат
Ваша идея предложила выполнить еще одну проверку правильности: домен адреса должен иметь действительную запись MX. Если кто-то неправильно набирает свой адрес электронной почты, и ошибка попадает в доменную часть адреса (например, person@domainn.com), доставка не будет выполнена, поскольку для домена не найдена запись MX (при условии, что ошибка не привела к другой, но все еще действительный домен).
Эрик Рат
Я изменил «принятый ответ» на JdeBP ниже - различие между заголовком сообщения и заголовком конверта действительно прибило его. Но спасибо за отзыв.
Эрик Рат
5
Исправление: SPF проверяет «MAIL FROM» в конверте, а не заголовки «From» или «Sender».
Саймон Ист