设置电子邮件标题,以便退回的电子邮件转到特定地址

时间:2011-03-14 19:38:58

标签: email bounce exim

在我们的rails应用程序中,我们会发送一些系统生成的电子邮件,其中“发件人”地址设置为noreply@ourdomain.com。如果这些反弹,他们会被我们的邮件服务器发回这个地址。但是,我想做的是不要将退回的电子邮件发送回noreply@ourdomain.com,而是发送到不同的地址,例如bounced@ourdomain.com。

我是否可以在电子邮件中设置标题或其他内容以实现此目的,而无需我去调查我们的电子邮件服务器的变幻莫测?如果相关,我们会使用exim发送邮件。

欢呼,最大

5 个答案:

答案 0 :(得分:9)

在阅读有关exim配置的很多后,我在exim4中自己想出了这个。

首先,您希望您的应用添加以下标题:

Return-Path: <bounced@yourdomain.com>

使用或不使用括号。 Exim会以任何方式添加括号。

其次,这是困难的部分。 Exim总是希望用发送它的unix用户覆盖我的Return-Path:地址。您可以使用Ubuntu中的/ etc / email-addresses为Web应用程序的用户设置静态电子邮件,但这仍然会忽略Return-Path标头。以下是我如何修改我的exim配置以尊重Web应用程序的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标头。

我尝试了很多其他配置指令,这是实际对我有用的唯一方法。

答案 1 :(得分:5)

3年来为时已晚,但万一有其他人来这种方式。 Return-Path是正确的标题,但正如James Garriss上面指出的那样,它必须由执行最终交付的网站放置在那里。你不能只是坚守自己。

如果您通过直接连接到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上试过这个,但它有完全相同的选项,它应该可以工作。

答案 2 :(得分:4)

Errors-To已被弃用,因此邮件服务器通常会忽略此标头 - 大多数服务器都会弹回“信封发件人”。

这是您的邮件客户端作为the connection to the SMTP服务器的一部分发送的电子邮件地址(不一定是发件人地址 - 尽管它通常是相同的)。

我不太了解Rails,但我找到了this - 尽管我已经知道了返回路径被MTA重置以匹配来自客户端的MAIL FROM信息,所以看来你实际上无法设置它。

我认为您唯一能做的就是在服务器中设置退回地址。

答案 3 :(得分:3)

以下是解决方案:

在电子邮件标题中,您可以设置:

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

Errors-To: <bounced@ourdomain.com>
Return-Path: <bounced@ourdomain.com>

答案 4 :(得分:2)

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...地址,请将原始电子邮件MIME邮件中的From标头设置为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@...邮件。这意味着这封电子邮件实际上是通过此退回处理地址发送的,而不是通过noreply地址发送的。

如果用户回复无回复电子邮件,您还可以看到专用于处理回复的Reply-To标头。那些回复可能会立即被丢弃。