解析退回的电子邮件

时间:2015-03-02 19:25:53

标签: email

解析退回(无法投递)电子邮件的最佳方法是什么?

当电子邮件退回我的服务器时,我想了解它为什么会退回(软/硬)和无法投递的电子邮件地址。然后我可以在我的数据库中正确处理它和/或标记用户在下次登录时更新他们的电子邮件。

我的目标是保护我的域名的邮件信誉。我只发送交易电子邮件,但一段时间后,其中一些收件箱变得陈旧,邮件又反弹回来。我不想继续每周发送电子邮件到反弹的地址。

我最近找不到很多关于此的问题,没有一个有实际的解决方案:

1)How to parse Delivery Status Notifications emails bounced from Mailer Deamons

2)Automatically remove bounced email addresses from database?

我希望有一些开源库来帮助解析无法传递的电子邮件,但似乎找不到类似的东西。当然人们长期以来一直在处理这个问题......

我想在我的服务器上处理这个问题而不是像sendgrid / mandrill / mailgun这样的服务。

有人能指出我正确的方向吗? (我正在使用Ubuntu和Postfix)

2 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点。

1)GREP

事实证明,postfix会在其日志文件中保留退回信息。所有永久性错误都将以5开头的dsn状态。使用grep,您可以获得具有该状态代码的电子邮件列表:

grep " dsn=5." /var/log/mail.log | grep -o -P " to=<(.+?)>" | sort | uniq -c

上面给出了所有的反弹。对于软反弹,请使用" dsn=4."

这个解决方案的优点是它很容易实现。缺点是我们必须依靠postfix才能正确解析邮件,如果您要发送到邮件列表而不是单个收件人,它可能无效。

2)VERP

变量信封返回路径(VERP)为每个电子邮件收件人使用唯一的返回路径。 (见wikipedia description

请注意&#39;返回路径&#39;电子邮件与&#39;回复&#39;不同。返回路径&#39;邮件服务器仅用于在出现问题时将电子邮件退回原始服务器。

简而言之,我们说我们会将 mymailinglist@mysite.com 的电子邮件发送到 richard@exapmle.com 。如果以正常方式发送,您将收到一条退回邮件,并且必须解析邮件以确定邮件的发送方式。但是使用verp,您可以将返回路径设置为 bouncelist+richard+example.com@mysite.com

现在,您可以专门为退回的电子邮件设置邮箱(bouncelist@mysite.com)。默认情况下,postfix会在&#34; +&#34;之后忽略任何内容。在电子邮件地址中,所有退回的邮件都会转到同一个地方。但现在原始电子邮件收件人( richard@exapmle.com )包含在返回路径中,可以很容易地解析出来。

如果您愿意,还可以使用虚拟邮箱将邮件直接发送到脚本。在/ etc / postfix / virtual中添加行

bouncelist: "| php mybounceparser.php"

这个解决方案实现起来肯定更复杂,但可能是大型邮件列表的唯一选择。

答案 1 :(得分:0)

在发送任何电子邮件之前,请考虑使用MailboxValidator免费API来筛选电子邮件地址。如果可以的话,最好避免反弹。

https://www.mailboxvalidator.com/api-single-validation

那就是你愿意写一些代码。

否则,您的另一个选择是将邮件列表的CSV上传到MailboxValidator批量验证页面并清除它们。验证完成后,您可以下载结果并导回到数据库中。