让我们从一个简单的例子开始。假设您有一个电子邮件列表,它将发送以下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”。
- 返回路径(有时称为反向路径、信封发件人或信封来自——所有这些术语都可以互换使用)是
MAIL FROM
命令中 SMTP 会话中使用的值。如您所见,这不需要与在消息头中找到的值相同。只有收件人的邮件服务器才应该在电子邮件顶部添加 Return-Path 标头。这将记录 SMTP 会话期间的实际返回路径发件人。如果消息中已存在 Return-Path 标头,则该标头将被删除并由收件人的邮件服务器替换。
在 SMTP 会话期间发生的所有退回都应返回到 Return-Path 地址。一些服务器可能会接受所有电子邮件,然后在本地排队,直到它有一个空闲线程将其传递到收件人的邮箱。如果收件人不存在,它应该将其退回到记录的 Return-Path 值。
请注意,并非所有邮件服务器都遵守此规则;一些邮件服务器会将其退回到 FROM 地址。
FROM 地址是在 FROM 标头中找到的值。这应该是消息的发件人。这就是您在大多数邮件客户端中看到的“FROM”。如果电子邮件没有回复标头,则所有人工(邮件客户端)回复都应返回到 FROM 地址。
回复标头由发件人(或发件人的软件)添加。这也是所有人类回复都应该处理的地方。基本上,当用户单击“回复”时,回复值应该是用作新撰写电子邮件的收件人的值。任何服务器都不应使用回复值。它仅供客户端 (MUA) 使用。
但是,正如您所知,并非所有邮件服务器都遵守 RFC 标准或建议。
希望这应该有助于解决问题。但是,如果我错过了什么,请告诉我,我会尽力回答。