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

Geo*_*Geo 155 email email-client smtp rfc bounce

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

FROM: marketing@customer.com
TO: subscriber1@domain1.com
Return-PATH: bouncemgmt@ourcompany.com
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何其他想法?

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

SMTP日志解析以获得退回

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

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

dav*_*nta 248

让我们从一个简单的例子开始.假设您有一个电子邮件列表,它将发送以下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.
Run Code Online (Sandbox Code Playgroud)

现在,假设您要从邮件列表发送它,它实现了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
Run Code Online (Sandbox Code Playgroud)

其中{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.
Run Code Online (Sandbox Code Playgroud)

现在,让我们描述不同的"FROM".

  1. Return-Path(有时称为Reverse-Path或Envelope-FROM-所有这些术语可以互换使用)是SMTP会话期间使用的值.如您所见,这不需要与邮件头中实际找到的值相同.只有收件人的邮件服务器应该在电子邮件的顶部添加一个Return-Path标头.这会在SMTP会话期间记录实际的Return-Path发件人.如果电子邮件中已存在Return-Path标头,则将删除该标头,并由收件人的邮件服务器替换.

    SMTP会话期间发生的所有跳出都应返回到Return-Path值.某些服务器可能接受所有电子邮件,然后在本地对其进行排队,直到它有一个免费线程将其传递到收件人的邮箱.如果收件人不存在,则应将其反弹回记录的Return-Path值.

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

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

  3. Reply-To标头由发件人(或发件人的软件)添加.这也是所有人类回复都应该得到解决的地方.基本上,当用户点击"回复"时,回复值应该是用作新撰写的电子邮件的回复的值.任何服务器都不应使用Reply-To值.它适用于客户端使用.

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

希望这有助于清理问题.但是,如果我错过了什么,请告诉我,我会尽力回答.

  • 关于如何使用`return-path`,我有点不清楚.如果`return-path`是一个返回地址,为什么收件人的邮件服务器会填写此字段而不是发件人?康宝特的服务器怎么会知道放在那里的东西?这不是倒退吗? (7认同)
  • 收件人的邮件服务器通过在SMTP"MAIL FROM"命令中复制发件人邮件服务器提供的值,将Return-Path标头插入到邮件中.想象一下,邮件室里的一名职员打开邮件 - 他们看着信封上的寄回地址,并在信件的顶部写下(扔掉信封). (6认同)
  • 好吧,从技术上讲,你可以(但不应该)添加一个返回路径头,但是,如果存在一个返回路径头,它将被接收的smtp服务器覆盖.如果不存在,则将其添加到标题的顶部. (5认同)
  • 那个`Sender:`标题如何适合这一切? (5认同)

小智 144

另一种思考Return-Pathvs的方法Reply-To是将它与蜗牛邮件进行比较.

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

信封内部可能是一个字母,在信件内部,它可以指示收件人"发送信件到示例地址 ".对于电子邮件,示例地址Reply-To.

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

  • 我要指出的是,在这个类比中未捕获的主要概念是"返回路径"标题由**接收**邮件服务器添加而***不是由发送者**添加.所以它更像是这样的:你可以在信封内写下你想要的任何地址,但要交付信息,你必须把它带到邮局并向他们展示你的驾驶执照(或其他身份证)和*他们*把那个地址放在发送之前的信封.换句话说,"Return-Path"标题与接收SMTP服务器执行的检查一样可靠,其他人很容易被欺骗. (21认同)
  • 这是一个很好的比喻. (14认同)
  • @Jesse Hobart +1提供了很好的解释,我很困惑,谢谢您使我更容易理解。 (2认同)

rob*_*tik 6

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

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