SMTP 服务器有没有办法告诉 MTA 用户已移至新地址?
有许多SMTP 返回代码,包括邮箱已满、地址不存在、邮件被拒绝等常见情况。
目前是否有或是否有提案允许服务器使用错误代码来响应传入邮件,表明用户已更改电子邮件地址并且现在可在新域名上使用?
再次强调,草案可以。我看过RFC 5321 第 4.2.3 节也许‘251:非本地用户将转发’有效,但我不确定电子邮件在 2020 年实际上是如何运作的。
用例:用户在电子邮件提供商之间迁移是一种常见的情况,我可以想象有一个宽限期(旧的提供商让传入的 MTA 知道用户已经移动到了另一个地址)可能之前已经讨论过了。
例子一名用户[电子邮件保护],但已移至 bar.com。foo.com 很高兴让传入连接知道此身份现在位于不同的域,并且发送者应该在一段时间内(比如 12 个月)更新他们的地址簿,之后 foo.com 不再为这个身份提供任何服务。
答案1
这两种情况都有这样的状态代码
- 转发 (
251 User not local; will forward to <forward-path>
) 和 - 拒绝 (
551 User not local; please try <forward-path>
)
但它们的目的是邮件用户代理(MUA),不适用于其他 MTA。
这RFC 5321, 3.4 转发以更正或更新地址解释这些具有能力通知发件人新地址。重点是我加的。
因此,实施者必须仔细评估 RFC 821 第 3.2 节中描述的“转发”机制,尤其是RCPT 的
251
(更正目的地)和551
回复代码,并且,如果这些代码可用,则必须由配置系统的人仔细评估(另见第 7.4 节)。尤其:
- 服务器在知晓地址变更时可以转发消息。当它们这样做时,它们可以提供带有代码的地址更新信息
251
,也可以“默默”转发并返回代码250
。但是,如果251
使用代码,他们不能假设客户端会实际更新地址信息,甚至将该信息返回给用户。交替,
- 当邮件无法准确按照地址投递时,服务器可以拒绝邮件或将其作为无法投递的邮件退回。在这样做时,它们可以提供带有代码的地址更新信息
551
,或者可以使用代码拒绝邮件550
,但不含地址特定信息。但是,如果551
使用代码,他们不能假设客户端会实际更新地址信息,甚至将该信息返回给用户。
实际情况是,MUA 不会根据这些状态代码来更新电子邮件地址,可能是因为很难证明其真实性。我也没有看到这些响应代码在任何地方被广泛使用。
还有自动电子邮件地址更新的实际问题,以及转发:
如果用户因为旧地址收到大量垃圾邮件而更改了地址,则披露新的联系信息是不明智的。这适用于个人电子邮件地址。
对于商业电子邮件地址,地址更改的可能原因是用户从另一个雇主那里获得了新工作。
区分电子邮件是发给此人还是发给其在公司中的前职位存在问题。需要发布两个新地址,而这些错误代码确实无法做到这一点,因为如果没有人为决定,自动更新是不可能的。
原雇主甚至不一定知道新地址。此外,向客户推荐这个新地址可能并不明智,因为这可能会让他们转向竞争对手。
通常,如果电子邮件被退回,发件人就会断定该人不再在那里工作
550 mailbox unavailable
。然后,他们会在 Google 上搜索适合其联系人的地址。
如果要区分从未存在过的邮箱和曾经存在但已被删除的邮箱,可以使用例如RFC 3463扩展状态代码X.1.6
:
X.1.6
目标邮箱已移动,无转发地址提供的邮箱地址曾经有效,但该地址不再接受邮件。此代码仅在永久性故障时有用。
最后,正如RFC 5321, 2.3.7:
回复的一般形式是数字完成代码(表示失败或成功),后面通常跟着一个文本字符串。代码供程序使用,文本通常供人类用户使用。
添加一个人类可读的解释是明智的,例如
550 5.1.6 Joe Bloggs has retired. See example.com/contact for a new representative.