我们有一个典型的商业网络应用程序,允许我们的用户向他们的客户发送包含产品的电子邮件.我们在FROM字段中设置用户电子邮件,以便客户端可以直接回复用户.问题是,由于SMTP协议,未传送的电子邮件通知将返回到我们的电子邮件地址(我们发送电子邮件的帐户的地址).
你知道处理这个无法传递的电子邮件的优雅方式吗?我的意思是让发件人知道他的邮件没有发送的最简单方法.
首先,了解"From:"标题(收件人在其电子邮件客户端中看到的)与发件人地址(也称为信封返回路径,或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.并且您可以为发送的电子邮件添加一些标识符,以防您将多封电子邮件发送到同一地址并想知道哪一个被退回.
这些技巧称为可变包络返回路径或VERP,通常由邮件列表软件实现.