14

我们有一个典型的商业网络应用程序,它允许我们的用户向他们的客户发送带有产品的电子邮件。我们在 FROM 字段中设置用户电子邮件,以便客户端可以直接回复用户。问题是由于 SMTP 协议,未送达的电子邮件通知会返回到我们的电子邮件地址(我们发送电子邮件的帐户地址)。

您知道处理这些未送达电子邮件的优雅方式吗?我的意思是让发件人知道他的邮件没有送达的最简单方法。

4

3 回答 3

19

首先,重要的是要了解“发件人:”标头(收件人在其电子邮件客户端中看到)和发件人地址(也称为信封返回路径,或 SMTP“MAIL FROM”命令的参数)之间的区别)。发件人地址是无法传递电子邮件时退回邮件的位置,因此是另一个名称返回路径。

SMTP 不限制您使用哪个地址作为发件人地址(除非它必须在语法上有效),但是您使用的任何 SMTP 客户端库都可能,因此您需要检查一下。

更改发件人地址是您可以做一些聪明的事情来帮助检测电子邮件退回并将它们报告回网络应用程序或发件人的地方。您将看到的最常见的事情是在发件人地址中对收件人地址进行编码,例如使用这样的发件人地址:sender+recipient=recipientdomain.com@senderdomain.com。负责 senderdomain.com 的 MTA 需要知道将 sender+foo@senderdomain.com 的所有电子邮件传送到 sender@senderdomain.com ——但这是一个相当普遍的要求。然后,您获取收到的电子邮件,而不是尝试从内容中的退回邮件(可能是任何格式)中找出收件人是谁,您可以直接从收件人地址获取它。

您也可以做更复杂的事情,例如对收件人地址进行散列处理,使其在发件人地址中不直接可见,例如 sender+e72fab38fb@senderdomain.com。您可以为已发送的电子邮件添加一些标识符,以防您向同一个地址发送多封电子邮件并想知道哪一封被退回。

这些技巧称为可变信封返回路径或 VERP,通常由邮件列表软件实现。

于 2008-09-23T22:49:27.353 回答
3

电子邮件有 3 个“标题”。

  1. 从。
    • 这就是用户眼中的“发起者”
  2. 回复。
    • 如果有意回复,这是发送电子邮件的地方
  3. 返回路径。
    • 这是在目的地不存在的情况下路由电子邮件的地方。

你可能想设置第三个:)

(请注意,有些服务器根本不回复这些丢失的邮件,因为最近垃圾邮件发送者已经将不属于他们自己的地址放在那里,使用自动回复系统进行第三部分退回攻击,将电子邮件服务器变成一个开放的中继! )

有关详细信息,请参阅本文档的第 4.4 节:http: //www.faqs.org/rfcs/rfc822.html

于 2008-09-23T22:32:38.703 回答
0

您究竟使用哪个例程来发送电子邮件?我们使用 HTTP put_lines 通过原始 SMTP 发送电子邮件,并且回复会退回到我们在 FROM: 字段中指定的地址。

查看您的 SMTP API 包装器是否有回复:字段

某些 API 可能不提供该功能,因为它增加了垃圾邮件的可能性。

于 2008-09-23T22:31:11.453 回答