我有大约 10,000 个订阅时事通讯的用户的数据库。我正在将我的网站从 asp 更改为 php。我正在通过 cron 作业发送时事通讯。我想跟踪不成功交付报告的记录。这怎么可能?请指导我,谢谢。
2 回答
在php中,当您使用邮件功能发送邮件时,您应该检查条件
if(mail($to, $subject, $message, $headers)){ // 邮件投递成功 } else { // 邮件不成功的代码 }
这对于 OP 实际尝试做的事情是非常不准确的......从手册中:
重要的是要注意,仅仅因为邮件被接受交付,并不意味着邮件实际上会到达预定目的地。
根据服务器类型和配置,您将获得不同的结果。最好使用 SMTP 来确保正确且一致的接口。通常我会使用一个库来做到这一点......你可以使用套接字自己手动完成,但为什么要重新发明轮子呢?根据项目,我使用了 3 个库...
对于这种级别的交互,我会使用 SwiftMailer 或 Zend_Mail。这两者都支持从 SMTP 获取信息以及发送消息,因此例如您可以获得有关失败收件人的信息(SwitftMailer 示例)。Zend 和 Swift 都支持自定义 spools 队列,因此您可以更深入地以应用程序感知方式集成队列和发送消息。SwiftMailer 也有 batchSend 功能……我认为 Zend_Mail 也有这个功能,但我从来没有深入研究过。
这只是战斗的一半......为了真正阅读 NDR,您需要编写脚本登录到邮件存储,循环浏览邮件,然后解析 NDR 的标题和/或邮件正文(确保您参考维基页面上列出的 RFC 文档),然后据此采取行动。最近我使用Zend_Mail_Storage来处理这个问题。如果您需要这样做,那么您可能还想继续使用 Zend_Mail 进行发送,因为 Storage 包含在组件中。您需要查看 NDR 和状态代码的 RFC 才能正确解析。
总的来说,如果可能的话,我建议只集成一个 3rd 方服务,比如MailChimp或Constant Contact。它的工作量要少得多,除非你有一个开发团队随着时间的推移在这方面工作,否则服务可能会全面产生更好的结果。
在php中,当您使用邮件功能发送邮件时,您应该检查条件
if(mail($to, $subject, $message, $headers)){ // 邮件投递成功 } else { // 邮件不成功的代码 }