【发布时间】:2010-09-12 13:32:38
【问题描述】:
我们有一个典型的商业网络应用程序,它允许我们的用户向他们的客户发送包含产品的电子邮件。我们在 FROM 字段中设置用户电子邮件,以便客户端可以直接回复用户。问题是由于 SMTP 协议,未送达的电子邮件通知会返回到我们的电子邮件地址(我们发送电子邮件的帐户地址)。
您知道处理这些未送达电子邮件的优雅方法吗?我的意思是让发件人知道他的邮件没有送达的最简单方法。
【问题讨论】:
标签: email
我们有一个典型的商业网络应用程序,它允许我们的用户向他们的客户发送包含产品的电子邮件。我们在 FROM 字段中设置用户电子邮件,以便客户端可以直接回复用户。问题是由于 SMTP 协议,未送达的电子邮件通知会返回到我们的电子邮件地址(我们发送电子邮件的帐户地址)。
您知道处理这些未送达电子邮件的优雅方法吗?我的意思是让发件人知道他的邮件没有送达的最简单方法。
【问题讨论】:
标签: email
首先,重要的是要了解“发件人:”标头(收件人在其电子邮件客户端中看到)和发件人地址(也称为信封返回路径,或 SMTP“MAIL”的参数FROM”命令)。发件人地址是电子邮件无法投递时退回邮件的位置,因此是另一个名称返回路径。
SMTP 不限制您使用哪个地址作为发件人地址(除非它必须在语法上有效),但您使用的任何 SMTP 客户端库都可能,因此您需要检查一下。
更改发件人地址是您可以做一些聪明的事情来帮助检测电子邮件退回并将它们报告回网络应用程序或发件人的地方。您将看到的最常见的事情是在发件人地址中编码 recipient 地址,例如发件人地址如下:sender+recipient=recipientdomain.com@senderdomain.com。负责 senderdomain.com 的 MTA 需要知道将 sender+foo@senderdomain.com 的所有电子邮件传送到 sender@senderdomain.com ——但这是一个相当普遍的要求。然后,您获取收到的电子邮件,而不是尝试从内容中的退回邮件(可以是任何格式)中找出收件人是谁,您可以直接从收件人地址获取它。
您也可以做更复杂的事情,例如散列收件人地址,使其在发件人地址中不直接可见,例如发件人+e72fab38fb@senderdomain.com。您可以为已发送的电子邮件添加一些标识符,以防您向同一个地址发送多封电子邮件并想知道哪一封被退回。
这些技巧称为Variable Envelope Return Path 或VERP,通常由邮件列表软件实现。
【讨论】:
电子邮件有 3 个“标题”。
你可能想设置第三个 :)
( 请注意,有些服务器根本不回复这些丢失的邮件,因为最近垃圾邮件发送者将不属于他们自己的地址放在那里,使用自动回复系统进行第三部分退回攻击,将电子邮件服务器变成打开中继!)
更多详情请参阅本文档的第 4.4 节:http://www.faqs.org/rfcs/rfc822.html
【讨论】:
您使用哪个程序来发送电子邮件? 我们使用 HTTP put_lines 通过原始 SMTP 发送电子邮件,并且回复会退回到我们在 FROM: 字段中指定的地址。
查看您的 SMTP API 包装器是否有回复:字段
某些 API 可能不提供该功能,因为它增加了垃圾邮件的可能性。
【讨论】: