41

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

我可以在电子邮件中设置一个标题或其他东西来实现这一点,而无需我去调查我们的电子邮件服务器的变幻莫测?如果相关,我们会使用 exim 发送邮件。

欢呼,最大

4

5 回答 5

12

在大量阅读有关 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 标头。

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

于 2011-08-12T22:54:25.913 回答
6

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 上试过这个,但它有完全相同的选项,它应该可以工作。

于 2014-11-03T13:39:52.183 回答
5

Return-Path标头由接收服务器写入,而不是由发送服务器写入。根据RFC 5321MAIL 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@...邮件。这意味着这封电子邮件实际上是由这个退回处理地址发送的,而不是由 noreply 地址发送的。

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

于 2018-03-02T12:04:08.533 回答
4

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

这是您的邮件客户端在连接到 SMTP服务器时发送的电子邮件地址(不一定是发件人地址 - 尽管通常是相同的)。

我不太了解Rails,但是我发现了这一点-尽管据我所知,返回路径已由MTA重置以匹配来自客户端的MAIL FROM信息,因此您似乎无法实际设置它.

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

于 2011-04-27T23:11:10.033 回答
3

这是解决方案:

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

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

Errors-To: <bounced@ourdomain.com>
Return-Path: <bounced@ourdomain.com>
于 2011-03-29T14:48:26.987 回答