Установите заголовки писем так, чтобы письма приходили на определенный адрес - PullRequest
34 голосов
/ 14 марта 2011

Из нашего приложения rails мы отправляем сгенерированные системой электронные письма с адресом «от», установленным по адресу noreply@ourdomain.com.Если они отказов, они отправляются обратно на этот адрес нашим почтовым сервером.Тем не менее, я хотел бы, чтобы не отправленные письма отправлялись обратно на noreply@ourdomain.com, а на другой адрес, например bounce@ourdomain.com.

Есть ли заголовок или что-то в этом роде?я могу указать в электронном письме, что я достигну этого, и мне не придется проверять капризы нашего почтового сервера?Мы отправляем письма, используя exim, если это актуально.

ура, макс.

Ответы [ 5 ]

9 голосов
/ 13 августа 2011

Я только что понял это в 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.

Я перепробовал множество других директив конфигурации, и это единственный способ, который действительно сработал для меня.

5 голосов
/ 03 ноября 2014

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, но у него точно такая же опция, и она должна работать.

4 голосов
/ 28 апреля 2011

Errors-To устарела, поэтому почтовые серверы, как правило, игнорируют этот заголовок - большинство серверов пересылает сообщение «отправителю конверта».

Это адрес электронной почты, который ваш почтовый клиент отправляет как часть соединение с SMTP сервером (не обязательно адрес отправителя - хотя обычно он один и тот же).

Я не очень хорошо знаю Rails, но нашел this - хотя, насколько я могу судить, Return-Path сбрасывается MTA, чтобы соответствовать информации MAIL FROM изклиент, так что, кажется, вы не можете на самом деле установить его.

Я думаю, единственное, что вы можете сделать, это установить адрес отказов на вашем сервере.

3 голосов
/ 29 марта 2011

Вот решение:

В заголовке письма вы можете указать:

From: "From Name" <from_name@ourdomain.com>
Reply-To: noreply@ourdomain.com

Errors-To: <bounced@ourdomain.com>
Return-Path: <bounced@ourdomain.com>
2 голосов
/ 02 марта 2018
Заголовок

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, который предназначен для обработки ответов, если пользователь отвечает на электронные письма без ответа. Эти ответы, вероятно, сразу отбрасываются.

...