Установите заголовки писем так, чтобы письма приходили на определенный адрес
Из нашего приложения rails мы отправляем сгенерированные системой электронные письма с адресом отправителя noreply@ourdomain.com. Если они отказов, они отправляются обратно на этот адрес нашим почтовым сервером. Тем не менее, я хотел бы, чтобы отосланные письма не отправлялись обратно на noreply@ourdomain.com, а на другой адрес, такой как bounce@ourdomain.com.
Есть ли заголовок или что-то, что я могу установить в электронном письме, чтобы добиться этого, без того, чтобы мне приходилось исследовать причуды нашего почтового сервера? Мы отправляем письма, используя exim, если это актуально.
ура, макс
5 ответов
Я сам понял это в exim4 после долгих чтений о конфигурации exim.
Сначала вы хотите, чтобы ваше приложение добавило следующий заголовок:
Return-Path: <bounced@yourdomain.com>
Работает с или без скобок. Exim в любом случае добавит скобки в конце.
Во-вторых, это была сложная часть. Exim всегда хотел переопределить мой Return-Path: адрес пользователем unix, который его отправил. Вы можете использовать /etc/email-address в Ubuntu, чтобы установить статическую электронную почту для пользователя вашего веб-приложения, но это все равно игнорирует заголовок Return-Path. Вот как я изменил свою конфигурацию exim для соответствия Return-Path из веб-приложения:
В основной области конфигурации добавить:
return_path_remove = false
В соответствующей конфигурации маршрутизатора (например, dnslookup):
dnslookup:
# ...
errors_to = ${if def:h_return-path: {${address:$h_return-path:}} fail}
headers_remove = return-path
no_more
Теперь exim должен скопировать адрес заголовка Return-Path на уровне конверта и удалить исходный заголовок Return-Path.
Я перепробовал множество других директив конфигурации, и это единственный способ, который на самом деле работал для меня.
3 года слишком поздно, но на всякий случай кто-нибудь еще придет таким путем. Return-Path
это правильный заголовок, но, как указал Джеймс Гаррисс выше, он должен быть размещен там, где выполняется окончательная доставка. Вы не можете просто засунуть это в себя.
Если вы пишете электронные письма, подключаясь напрямую к SMTP-серверу, то это легко - MAIL
Команда содержит путь возврата. Если вы отправите
MAIL FROM:<me@foo.com>
SMTP-серверу, то возвраты будут возвращены me@foo.com
,
Если вы не создаете SMTP и используете MTA (то есть exim/etc), вам нужно найти параметр командной строки для вашего MTA. Для sendmail, -f me@foo.com
"устанавливает адрес отправителя", и это заканчивается Return-Path
в последней доставленной почте, и me@foo.com
получит отскоки (я делаю именно это для автоматически генерируемых писем). Я не пробовал это на exim, но у него точно такой же вариант, и он должен работать.
Return-Path
заголовок записывается принимающим сервером, а не отправляющим сервером. И в соответствии с RFC 5321, он совпадает с адресом, указанным в MAIL FROM
команда.
Даже если вы установите Return-Path
Заголовок сам, получающий сервер перезапишет это.
Теперь вот вещь, адрес в MAIL FROM
команда и адрес в From
заголовок может быть разным. Пользователь-получатель не видит MAIL FROM
адрес. Они видят только From
адрес заголовка.
Так что, если вы хотите игнорировать отказы или хотите, чтобы они переходили на определенный адрес, вы должны использовать этот адрес в MAIL FROM
команда.
Но в From
заголовок, вы можете просто использовать noreply@yourdomain.com
- пользователь увидит этот адрес.
Чтобы упростить немного больше, вы отправляете письмо от handle_bounce@yourdomain.com
адрес. Сервер-получатель отправит сообщения об этом на этот адрес.
Чтобы показать вашему пользователю noreply@yourdomain.com
адрес вместо handle_bounce...
адрес, установите From
заголовок в необработанном MIME сообщении электронной почты noreply...
адрес.
Недавно я получил электронное письмо без ответа от Bitbucket. Вот сырое сообщение:
Return-Path: <bounce-1231860_HTML-1209402755-103116181-132689-225@bounce.mailer.atlassian.com>
From: "Atlassian Bitbucket" <noreply@mailer.bitbucket.org>
To: <me@hostname.com>
Subject: Continuous delivery, without the headache.
Date: Wed, 28 Feb 2018 12:40:53 -0600
MIME-Version: 1.0
Reply-To: "Atlassian Bitbucket" <reply-fe3915707665057b741c71-1231860_HTML-1209402755-132689-225@mailer.atlassian.com>
... message body ...
Как видите, Return-Path
адрес, предназначенный для обработки отказов Но From
адрес noreply@...
почта. Это означает, что это электронное письмо было отправлено с этого адреса, а не с обычного адреса.
Вы также можете увидеть Reply-To
заголовок, который предназначен для обработки ответов, если пользователь отвечает на электронные письма без ответа. Эти ответы, вероятно, сразу отбрасываются.
Errors-To устарела, поэтому почтовые серверы обычно игнорируют этот заголовок - большинство серверов будут передавать "отправителю конверта".
Это адрес электронной почты, который ваш почтовый клиент отправляет как часть соединения с SMTP- сервером (не обязательно адрес отправителя, хотя обычно он один и тот же).
Я не очень хорошо знаю Rails, но я нашел это - хотя, насколько я могу судить, Return-Path сбрасывается MTA для соответствия информации MAIL FROM от клиента, так что кажется, что вы не можете на самом деле установить ее,
Я думаю, что единственное, что вы можете сделать, это установить адрес отказов на вашем сервере.
Вот решение:
В заголовке письма вы можете указать:
From: "From Name" <from_name@ourdomain.com>
Reply-To: noreply@ourdomain.com
Errors-To: <bounced@ourdomain.com>
Return-Path: <bounced@ourdomain.com>