在webapp中处理未传递的电子邮件

时间:2008-09-23 22:25:11

标签: email

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

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

3 个答案:

答案 0 :(得分:18)

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

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

更改发件人地址是您可以执行巧妙操作以帮助检测电子邮件退回并将其报告回Web应用程序或发件人的地方。您将看到的最常见的事情是在发件人地址中对收件人地址进行编码,例如:发件人地址如下:sender+recipient=recipientdomain.com@senderdomain.com。负责senderdomain.com的MTA需要知道将sender_foo@senderdomain.com的所有电子邮件发送到sender@senderdomain.com - 但这是一个相当普遍的要求。然后,您接收收到的电子邮件,而不是尝试从收件人所在的内容(可以是任何格式)中的退回邮件中解决,您可以从收件人地址直接获取。

您也可以执行更复杂的操作,例如对收件人地址进行哈希处理,以便直接在发件人地址中显示,例如: sender+e72fab38fb@senderdomain.com。并且您可以为发送的电子邮件添加一些标识符,以防您将多封电子邮件发送到同一地址并想知道哪一封邮件被退回。

这些技巧称为Variable Envelope Return Path或VERP,通常由邮件列表软件实现。

答案 1 :(得分:3)

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

  1. 从。
    • 这是用户视为“发起人”
    • 的内容
  2. 回复到。
    • 如果有意回复,则会发送电子邮件
  3. 返回路径。
    • 这是在目的地不存在的情况下路由电子邮件的地方。
  4. 您可能想要设置第3个:)

    (注意,有些服务器根本没有回复这些丢失的邮件,因为最近垃圾邮件发送者一直在那里放置不属于他们自己的地址,使用自动回复系统将电子邮件服务器转换为第3部分反弹攻击开放中继!)

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

答案 2 :(得分:0)

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

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

某些API可能无法提供该功能,因为它会增加发送垃圾邮件的可能性。