【问题标题】:Email queueing in phpphp中的电子邮件队列
【发布时间】:2010-09-06 06:23:34
【问题描述】:

在 PHP 中发送最少 1000 封或更多电子邮件的最正确方法是什么?任何可靠的电子邮件排队技术能够处理这个问题?

【问题讨论】:

    标签: php email queue


    【解决方案1】:

    您可以将您的电子邮件插入到邮件队列数据库表中,并让一个单独的进程检查队列并一次批量发送一定数量。

    【讨论】:

      【解决方案2】:

      我通常依赖 hack。 我有一个电子邮件地址的数据库列表,然后使用一个元重定向到自我,并增加“偏移”参数,该参数指定我在数据库中的哪一行。服务器重定向会导致问题,因为浏览器假定所花费的时间表示无限循环。

      【讨论】:

        【解决方案3】:

        正如 mercutio 建议的那样,我会为每封等待发送的电子邮件在邮件队列表中插入一条新记录,然后使用单独的进程(如 CRON)定期检查表中是否有任何排队的项目。

        如果有任何电子邮件排队(并且电子邮件不是为每个收件人定制的),我会按域对电子邮件进行分组并一起发送块以减少必须发送的电子邮件总数,即如果您有 1000 封电子邮件排队和 250 是到 gmail 帐户,我会在 25 个 10 块中发送 250 个(记住密件抄送收件人以避免他们看到对方)。

        要实际发送邮件,我会通过 php 的 mail() 函数使用 PEAR mail

        在发送电子邮件后,从队列中删除记录或更改状态标志以显示它已发送并循环 - 我还将添加一个计数器来跟踪未能发送的电子邮件,并在 x 失败后将其删除尝试

        为了克服超时问题,我也愿意,(视情况而定) - 将 set_time_limit() 设置为 x 秒并跟踪脚本执行时间(在 (x-1) 秒后终止脚本) - 从命令行调用脚本以避免超时 - 设置脚本在一次执行中可以发送的电子邮件数量限制

        【讨论】:

          【解决方案4】:

          当然,数据库表可能是一个想法。但是发送 1000 封带有 2mb 附件的电子邮件呢?你也必须考虑到这一点。我自己也遇到了问题,最终我求助于将电子邮件写入数据库,将文件写入文件系统。然后我使用的电子邮件脚本读取数据库记录,并尝试获取要发送的附件。

          【讨论】:

            【解决方案5】:

            有一个经过测试的解决方案:PEAR Mail_Queue

            对我来说很好。

            【讨论】:

            • 我用它一次排队 30,000 多封邮件。一个相当简单的脚本一次发送大约 250 个 - 如果负载平均值不太高。您不会更快地发送它们,但它会毫无问题地发送它们。
            【解决方案6】:

            您确定需要自己进行邮件排队吗?

            只需将所有邮件发送到本地机器的邮件传输代理(sendmail...),然后让其负责排队和发送。毕竟,这就是设计的目的。

            换句话说:别担心!

            【讨论】:

            • 如果您要交付几十个,那不是问题。 Sendign 数以千计的电子邮件将为每个人启动一个新的 sendmail 流程 - 然后您最终会获得大量平均负载,从而使服务器陷入瘫痪。我已经 Pear_Mail_Queue'd 50,000+ 没有问题
            • 我试过了,发现 sendmail 开始出现长时间的停顿 -- 见 serverfault.com/questions/551649/sendmail-slow-to-accept-emails
            【解决方案7】:

            我创建了 Emailqueue,它是一个服务器,允许您将电子邮件添加到队列中,这样您的应用程序就可以减轻邮寄的压力,并且还提供了有用的附加选项,例如对要发送的电子邮件进行编程的能力未来,或设置每个电子邮件的发送优先级。我认为这很可能就是您要搜索的内容。

            电子邮件队列在这里可用:https://github.com/tin-cat/emailqueue

            还有一个 Docker 版本可以让您在几分钟内设置一个正常工作的 Emailqueue 服务器,这里:https://github.com/tin-cat/emailqueue-docker

            【讨论】:

              猜你喜欢
              • 2022-08-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-21
              • 1970-01-01
              • 1970-01-01
              • 2023-03-30
              • 1970-01-01
              相关资源
              最近更新 更多