返回路径(return-path)、回复地址(reply-to)和发件人(from)之间的行为差异是什么?

181
我们的邮件应用程序发送邮件时使用以下标题:
FROM: marketing@customer.com
TO: subscriber1@domain1.example
Return-PATH: bouncemgmt@ourcompany.example
我们面临的问题是,一些电子邮件服务器会立即反弹回消息,并使用发件人或反向路径 (marketing@customer.example) 来到我们的反弹管理服务器。我们想知道如果我们在标头中修改回复地址为与返回路径相同,是否能够捕获所有反弹消息。
欢迎提出任何其他想法。
我们正在使用以下文档作为参考: VERP RFC Bounce Messages SMTP日志解析以获取反弹 编辑1:更多信息,看看是否可以解决这个问题。
我们想知道邮件服务器在什么时候选择使用回复地址而不是返回路径。我们已经注意到,当第一个 SMTP 服务器中继该消息被拒绝时,它会将其发送到回复地址,但是当它发生在一次跳跃之后时,它会将其发送到返回路径。

1
关于指定发件人(Sender:)和优先级(Precedence:)字段怎么样?我想了解更多它们对不同邮件服务器在退信和自动回复等方面的影响。有人知道吗? - PapaFreud
1
https://www.postmastery.com/blog/about-the-return-path-header/ - Accountant م
4个回答

282

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

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

This is a very simple body.
现在,假设您将从实现VERP(或使用不同return-path的其他反弹跟踪机制)的邮件列表发送它。假设它将具有coolstuff-you=yourcompany.com@mymailinglist.example的return-path。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.example>
{S}250 2.1.0 me@mycompany.com....Sender OK
{C}RCPT TO:<you@example.com>
{S}250 2.1.5 you@example.com
{C}DATA
{S}354 Start mail input; end with <CRLF>.<CRLF>
{C}From: <coolstuff@mymailinglist.example>
To: <you@example.com>
Subject: Super simple email
Reply-To: <coolstuff-threadId=123@mymailinglist.example>

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.example
From: <coolstuff@mymailinglist.example>
To: <you@example.com>
Subject: Super simple email
Reply-To: <coolstuff-threadId=123@mymailinglist.example>

This is a very simple body.
现在,让我们描述不同的"FROM"。
  1. 返回路径(有时称为反向路径、信封发送者或信封发件人 - 所有这些术语都可以互换使用)是SMTP会话中在MAIL FROM命令中使用的值。正如您所看到的,这不需要与消息头中找到的值相同。只有收件人的邮件服务器才应将Return-Path标头添加到电子邮件顶部。它记录了SMTP会话期间实际的Return-Path发件人。如果消息中已经存在Return-Path标头,则该标头将被删除并由收件人的邮件服务器替换。

在SMTP会话期间发生的所有退信都应返回到Return-Path地址。一些服务器可能会接受所有电子邮件,并将其本地排队,直到它有一个空闲线程将其传递到收件人的邮箱。如果收件人不存在,则应将其反弹回记录的Return-Path值。

请注意,并非所有邮件服务器都遵守此规则;有些邮件服务器将其反弹回FROM地址。

  1. FROM地址是在FROM头中找到的值。这应该是邮件发送者的地址。这就是大多数邮件客户端中看到的“FROM”地址。如果电子邮件没有回复地址,则所有人类(邮件客户端)回复都应返回到FROM地址。

  2. 回复地址由发送者(或发送者的软件)添加。这是所有人类回复应寄送的地方。基本上,当用户点击“回复”时,回复地址的值应该是新组成的电子邮件的收件人。回复地址的值不应由任何服务器使用。它仅供客户端(MUA)使用。

然而,正如您所知,不是所有的邮件服务器都遵守RFC标准或建议。

希望这可以帮助澄清事情。如果我漏掉了什么,请告诉我,我会尽力回答。


1
这非常有帮助。感谢您的时间。有一个问题。是否可能会出现一些反弹到回复地址(reply-to)而不是返回路径(return-path)的情况? - Geo
5
从技术上讲,你可以(但不应该)添加一个Return-Path头部,然而,如果已经存在一个Return-Path头部,那么它将被接收的SMTP服务器覆盖。如果不存在,则应该在邮件头部的顶部添加。 - dave wanta
8
我有点不清楚return-path的用法。如果return-path是用来作为回寄地址,那么为什么收件人的邮件服务器会填写这个字段而不是发件人呢?收件人的服务器怎么知道应该在哪里填写呢?这不是似乎有些反常吗? - greatwolf
6
收件人的邮件服务器通过复制发件人在SMTP“MAIL FROM”命令中提供的值,将Return-Path标题插入消息中。想象一下邮房里的职员打开信件,他们查看信封上的退信地址,并在信件顶部写下它(然后丢掉信封)。 - John Hascall
6
Sender: 头部信息在这一切中起到什么作用? - Simon East
显示剩余5条评论

172

另一种理解 Return-PathReply-To 的方法是将其与邮寄信函进行比较。

当您发送一封信封时,会指定一个回邮地址。如果收件人不存在或拒绝您的邮件,则邮政总局将信封退回到回邮地址。对于电子邮件,回邮地址就是Return-Path

信封内部可能有一封信,而信中可能指示收件人“发送信函至示例地址”。对于电子邮件,示例地址即为Reply-To

本质上,邮资回邮地址与SMTP的Return-Path标头相似,SMTP的Reply-To标头类似于信中包含的回复说明。


2
@Jesse Hobart,赞一个,非常好的解释。我之前更加困惑,谢谢您让我更容易理解了。 - Abhishek
32
这个比喻没有涵盖的主要概念是Return-Path邮件头是由接收方邮件服务器添加的,而不是由发件人添加的。所以更像是这样:你可以在信封里写上任何地址,但为了投递信件,你必须将其带到邮局并出示驾驶执照(或其他身份证明),然后他们会在发送前将该地址放在信封上。换句话说,Return-Path邮件头的可信程度取决于接收SMTP服务器执行的检查,而其他邮件头容易被欺骗。 - cdhowie

5

针对那些因问题标题而来到这里的人:

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


你的回答中甚至没有提到 return-path。 - Steve Moretz
@SteveMoretz 我从未使用过它,只能从其他答案中阅读到有关它的信息。但我的示例是一个真实而有用的场景,这就是为什么我分享它的原因。 - robotik
1
谢谢分享,我以为你忘了它,看起来return-path用于无法到达的电子邮件:https://www.mailgun.com/resources/learn/glossary/return-path/#:~:text=The%20return%2Dpath%20is%20used,separate%20from%20your%20sending%20address. - Steve Moretz
1
"return-path" 无法由发送者设置,它是由初始 MTA 设置的,通常与信封发件人(smtp MAIL FROM: 地址)相同。 - ErnestV
1
“return-path”无法由发件人设置,它是由初始MTA设置的,并且通常与信封发件人(smtp MAIL FROM:地址)相同。 - undefined

2

我需要在由Redmine实例发送的电子邮件中添加Return-Path头信息。 我同意greatwolf的观点,只有发件人才能确定正确(非默认)的Return-Path。 情况如下: 使用默认电子邮件地址admin@example.com发送电子邮件。 但是我们希望真正发起操作的用户收到退信邮件,因为他会知道如何修复错误的收件人电子邮件(而不是应用程序管理员,他们还有其他烦恼 :-))。 我们在应用程序服务器上使用它,并且与作为最终公司邮件服务器的zimbra完美配合。


返回路径几乎总是指向“MAIL FROM:”地址(信封发件人)。 - ErnestV
返回路径几乎总是指向“MAIL FROM:”地址(信封发件人)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接