在Webapp中处理未送达的电子邮件

时间:2020-03-06 14:37:56  来源:igfitidea点击:

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

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

解决方案

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

查看SMTP API包装器是否具有"答复:"字段

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

电子邮件有3个"标题"。

我们可能想设置第三个:)

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

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

首先,了解"发件人:"标头(收件人在其电子邮件客户端中看到的)与发件人地址(也称为信封返回路径,或者SMTP" MAIL FROM"命令的参数)之间的区别很重要)。发件人地址是无法发送电子邮件时退回邮件的去向,因此是其他名称的返回路径。

SMTP并没有限制我们将哪个地址用作发件人地址(除非它必须在语法上有效),但是无论我们使用什么SMTP客户端库都可能会出现,因此我们需要进行检查。

更改发件人地址,我们可以在这里做一些聪明的事情,以帮助检测电子邮件退回并将其报告给Web应用程序或者发件人。我们将看到的最常见的事情是将收件人地址编码为发件人地址,例如具有这样的发件人地址:[email protected]。负责senderdomain.com的MTA需要知道将所有[email protected]的电子邮件传递到[email protected]但这是一个相当普遍的要求。然后,我们将接收收到的电子邮件,而不是尝试从收件人的内容(可以是任何格式)的退回邮件中找出答案,而是可以从收件人的地址中获取正确的信息。

我们还可以执行更复杂的操作,例如对收件人地址进行哈希处理,这样就不能直接在发件人地址中看到它,例如[email protected]。而且,如果我们要向同一地址发送多封电子邮件,并且想知道是哪一封被退回,则可以为发送的电子邮件添加一些标识符。

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