我正在使用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没有等待响应,因此没有地址列表。