使用Zend Mail处理未发送的电子邮件



我正在使用Zend Mail发送时事通讯。我已经使用setReturnPath()将所有未投递的邮件通知放在一个地方。

现在呢?

  • 如何获取无法访问的地址列表?
  • 如何读取和解析返回的通知?
  • 如何知道邮件是由于不存在的邮件还是仅仅超出了配额而返回?
  • 我需要发送和检查哪些头?
相关:

  • 可变包络返回路径wiki
  • 在web应用程序中处理未发送的邮件so

这个类可能会有帮助。可以确定邮件是否被退回,并返回描述为

的响应代码:
  • http://www.phpclasses.org/package/2691-PHP-Parse-bounced-e-mail-message-reports.html

简短回答:

你不能用简单的方式做到这一点,而不是在你的应用程序中。

长答:

你应该以异步的方式在你的php应用程序之外处理它(至少部分)。首先,您必须将返回地址设置为类似于TimB答案中的sender+recipient=recipientdomain.com@senderdomain.com。此时,接收smtp服务器发送的所有通知都将转到该地址。

那么你需要在senderdomain.com邮件交换器上设置smtp守护进程来处理这种反弹消息,并在某种管道中处理它们。

使用管道,您可以将返回的消息转发给外部程序,该程序解析消息并提取所需的信息(即传递失败的原因)

在你的程序中(可以是应用程序中的cli脚本),你可以将地址标记为失败,并可以选择记录原因。

这是一个相当困难的任务,不能在一个简单的应用程序中处理。通常我使用专用软件来处理大型邮件列表,如sympa,它会为您处理此任务。

否则,你可以使用外部交付服务,如Sendgrid,它会为你做脏的工作,并报告失败的地址与一个简单的API。这个解决方案的一个好处是,它们在所有主要供应商的白名单中,所以只要你遵守一些简单的规则(即删除反弹地址并为你的新闻通讯使用选择策略),你的电子邮件就不会被标记为垃圾邮件

第二个链接,特别是TimB的回答,很好地解释了这个过程。

可能不清楚的是,返回路径只不过是一个普通的电子邮件帐户,即您将收到该地址的电子邮件。Zend_Mail没有等待响应,因此没有地址列表。

最新更新