return-path,reply-to和from之间的行为区别是什么?

时间:2009-08-05 20:24:11

标签: email smtp rfc email-client bounce

在我们的邮件应用程序中,我们使用以下标题发送电子邮件:

FROM: marketing@customer.com
TO: subscriber1@domain1.com
Return-PATH: bouncemgmt@ourcompany.com

我们面临的问题是,某些电子邮件服务器会立即退回邮件,并使用来自或反向路径(marketing@customer.com)代替我们的反弹管理服务器。我们想知道如果我们能够捕获所有反弹,我们是否在标题中修改回复与返回路径相同。

欢迎任何其他想法?

我们使用以下文件作为参考: VERP RFC Bounce Messages

SMTP Log Parsing to get Bounces

编辑1:更多信息,看看我们是否可以得到这个解决方案。

我们想知道中继邮件的电子邮件服务器将在什么时候选择使用回复路径与返回路径。我们注意到,当第一个中继消息的smtp服务器被拒绝时,它会将其发送到reply-to,但是当它在一跳之后发生时它将它发送到返回路径。

4 个答案:

答案 0 :(得分:243)

让我们从一个简单的例子开始。假设您有一个电子邮件列表,它将发送以下RFC2822内容。

From: <coolstuff@mymailinglist.com>
To: <you@yourcompany.com>
Subject: Super simple email
Reply-To: <coolstuff-threadId=123@mymailinglist.com>

This is a very simple body.

现在,假设您要从邮件列表发送它,它实现VERP(或使用不同返回路径的其他一些跳出跟踪机制)。可以说它的返回路径为coolstuff-you=yourcompany.com@mymailinglist.com。 SMTP会话可能如下所示:

{S}220 workstation1 Microsoft ESMTP MAIL Service
{C}HELO workstation1
{S}250 workstation1 Hello [127.0.0.1]
{C}MAIL FROM:<coolstuff-you=yourcompany.com@mymailinglist.com>
{S}250 2.1.0 me@mycompany.com....Sender OK
{C}RCPT TO:<you@yourcompany.com>
{S}250 2.1.5 you@yourcompany.com 
{C}DATA
{S}354 Start mail input; end with <CRLF>.<CRLF>
{C}From: <coolstuff@mymailinglist.com>
To: <you@yourcompany.com>
Subject: Super simple email
Reply-To: <coolstuff-threadId=123@mymailinglist.com>

This is a very simple body.
.

{S}250 Queued mail for delivery
{C}QUIT
{S}221 Service closing transmission channel

其中{C}和{S}分别代表客户端和服务器命令。

收件人的邮件如下:

Return-Path: coolstuff-you=yourcompany.com@mymailinglist.com
From: <coolstuff@mymailinglist.com>
To: <you@yourcompany.com>
Subject: Super simple email
Reply-To: <coolstuff-threadId=123@mymailinglist.com>

This is a very simple body.

现在,让我们描述不同的“FROM”。

  1. 返回路径(有时称为反向路径,信封发件人或信封 - 所有这些术语可以互换使用)是MAIL FROM命令中SMTP会话中使用的值。如您所见,这不需要与消息头中的值相同。只有收件人的邮件服务器应该在电子邮件的顶部添加一个Return-Path标头。这会在SMTP会话期间记录实际的Return-Path发件人。如果邮件中已存在Return-Path标头,则该标头将被删除并由收件人的邮件服务器替换。
  2. SMTP会话期间发生的所有跳出都应返回到返回路径地址。某些服务器可能会接受所有电子邮件,然后在本地对其进行排队,直到它有一个空闲的线程将其传递到收件人的邮箱。如果收件人不存在,则应将其反弹回记录的Return-Path值。

    注意,并非所有邮件服务器都遵守此规则;某些邮件服务器会将其退回到FROM地址。

    1. FROM地址是FROM标头中的值。这应该是消息来自谁。这就是您在大多数邮件客户端中看到的“FROM”。如果电子邮件没有Reply-To标头,那么所有人(邮件客户端)回复都应该返回到FROM地址。

    2. 发件人(或发件人的软件)添加了回复标题。这也是所有人类回复都应该得到解决的地方。基本上,当用户点击“回复”时,回复值应该是用作新撰写的电子邮件的收件人的值。任何服务器都不应使用Reply-To值。它仅供客户端(MUA)使用。

    3. 但是,正如您所知,并非所有邮件服务器都遵守RFC标准或建议。

      希望这有助于澄清事情。但是,如果我遗漏了任何内容,请告诉我,我会尽力回答。

答案 1 :(得分:138)

考虑Return-Path vs Reply-To的另一种方法是将其与蜗牛邮件进行比较。

在邮件中发送信封时,请指定返回地址。如果收件人不存在或拒绝您的邮件,邮寄主管将信封返回到返回地址。对于电子邮件,返回地址Return-Path

信封内部可能是一封信,信件内部可能会指示收件人“将信件发送到示例地址”。对于电子邮件,示例地址Reply-To

实质上,邮资退货地址与SMTP的Return-Path标题相当,而SMTP的Reply-To标题类似于信件中包含的回复说明。

答案 2 :(得分:4)

对于那些因为题目标题而来到这里的人:

我在网络表单中使用Reply-To:地址。当有人填写表单时,该网页会向该页面的所有者发送一封自动发送的电子邮件。 From:是自动邮件发件人的地址,因此所有者知道它来自网络表单。但Reply-To:地址是用户在表单中填写的地址,因此所有者只需点击回复即可与他们联系。

答案 3 :(得分:1)

我必须在Redmine实例发送的电子邮件中添加一个Return-Path标头。 我同意大狼只有发送者可以确定一个正确的(非默认的)返回路径。 案例如下: 电子邮件使用默认电子邮件地址发送:admin@yourcompany.com 但我们希望启动操作的真实用户收到退回电子邮件,因为他将知道如何修复错误的收件人电子邮件(而不是那些有其他猫鞭子的应用程序管理员:-))。 我们使用它,它与应用程序服务器上的exim和作为最终公司邮件服务器的zimbra完美配合。