【问题标题】:Question about Unsuccessful delivery reports in sending bulk Emails关于群发邮件送达报告不成功的问题
【发布时间】:2011-05-01 11:07:59
【问题描述】:

我有大约 10,000 个订阅时事通讯的用户的数据库。我正在将我的网站从 asp 更改为 php。我正在通过 cron 作业发送时事通讯。我想跟踪不成功交付报告的记录。这怎么可能? 请指导我,谢谢。

【问题讨论】:

    标签: email bulk-email


    【解决方案1】:

    在 php 中当你用邮件发送邮件时 您应该检查的功能 条件

    if(邮件($to, $subject, $message, $headers)){ // 邮件成功 交付 } else { // 代码 邮寄不成功 }

    这对于 OP 实际尝试做的事情是非常不准确的...From the manual:

    重要的是要注意 因为邮件被接受 交付,这并不意味着邮件 实际上会达到预期的 目的地。

    根据服务器类型和配置,您将获得不同的结果。最好使用 SMTP 来确保正确且一致的接口。通常我会使用一个库来做到这一点......你可以使用套接字自己手动完成,但为什么要重新发明轮子呢?根据项目,我使用了 3 个库...

    对于这种级别的交互,我会使用 SwiftMailer 或 Zend_Mail。这两者都支持从 SMTP 获取信息以及发送消息,因此例如,您可以获得有关失败收件人的信息 (SwitftMailer example)。 Zend 和 Swift 都支持自定义 spools 队列,因此您可以更深入地以应用程序感知方式集成队列和发送消息。 SwiftMailer 也有 batchSend 功能……我认为 Zend_Mail 也有这个功能,但我从来没有深入研究过。

    这只是成功的一半...为了真正阅读 NDR,您需要编写脚本登录到邮件存储,循环浏览邮件,然后 parsing the headers and/or the message body of the NDR(确保您参考 RFC 文档wikipage 上列出的),然后据此采取行动。最近我用Zend_Mail_Storage 来处理这个问题。如果您需要这样做,那么您可能还想继续使用 Zend_Mail 进行发送,因为 Storage 包含在组件中。您需要查看 NDR 和状态代码的 RFC 才能正确解析。

    总的来说,如果可能的话,我建议只集成一个第三方服务,如MailChimpConstant Contact。它的工作量要少得多,除非你有一个开发团队随着时间的推移在这方面工作,否则服务可能会全面产生更好的结果。

    【讨论】:

    • 请第三方服务为您处理所有这些 - 通常您的头痛和痛苦都会减少(除非您发送垃圾邮件。)这是您应该查看的列表:MailChimp,持续联系和 AWeber。
    • 昨天我使用 phpmailer 向一个包含 54000 个用户的数据库发送了一份测试时事通讯。大约 10 分钟后,脚本停止并在页面上显示错误,例如“发生内部服务器错误”。我很困惑。有什么类型的问题?请帮忙。
    • 那只是服务器端错误的通用代码,所以我不知道。您应该查看错误日志并获取实际的 PHP 和/或 http 错误。将真正的错误消息与发送邮件的过程一起发布到新问题。我的猜测是你用尽了脚本的时间限制或内存不足之类的。提示:不要只将所有收件人添加到密件抄送或收件人字段,您需要排队发送。
    【解决方案2】:

    在 php 中,当您使用邮件功能发送邮件时,您应该检查条件

    if(邮件($to, $subject, $message, $headers)){ // 邮件投递成功 } 别的 { // 发送不成功的代码 }

    【讨论】:

    • 对于他想要做的事情并不是一个很好的解决方案(据我所知)......看我的回答。
    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2012-11-16
    • 2021-05-06
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多