2015-03-02 106 views
1

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

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

我的目标是保护我的域名的邮件声誉。我只发送交易电子邮件,但过了一段时间,这些收件箱中的一些变得陈旧,邮件反弹回来。我不想每周都将电子邮件发送到反弹的地址。

我找不到任何关于这最近的许多问题,并且什么都没有实际的解决方案:

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)

回答

0

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

1)GREP

事实证明,后缀保持反弹的信息在它的日志文件。所有永久错误将有5开始使用grep一个DSN状态,你可以得到与状态代码的邮件列表:以上

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

给所有硬反弹。对于软反弹,请使用" dsn=4."

这个解决方案的好处是它很容易实现。缺点是我们不得不依靠postfix来正确解析邮件,如果您发送到邮件列表而不是单个收件人,它可能不起作用。

2)VERP

可变信封返回路径(VERP)使用为每个电子邮件收件人独特的返回路径。 (请参阅wikipedia description

请注意,电子邮件的“返回路径”与“回复到”不同。 “返回路径”仅在邮件服务器用于在出现问题时将电子邮件退回到始发服务器。

总之,让我们说我们是从[email protected]发送电子邮件至[email protected]。如果您以正常的方式发送,您将收到退信消息,并且必须解析消息以确定发送给谁。但是使用verp,您将返回路径设置为[email protected]

现在,您可以专门为退回的电子邮件设置邮箱([email protected])。默认情况下,postfix会忽略电子邮件地址中的“+”之后的任何内容,因此所有退回的邮件都会到达相同的地方。但是现在,原始电子邮件收件人([email protected])包含在返回路径中,并且可以轻松解析出来。

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

bouncelist: "| php mybounceparser.php" 

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