【问题标题】:Can I pipeline mails using CakeEmail?我可以使用 CakeEmail 传送邮件吗?
【发布时间】:2014-04-29 22:18:07
【问题描述】:

我需要在发票循环期间发送个性化电子邮件。意味着每个客户都会收到一封电子邮件,例如“亲爱的 Joe Smith 先生,...”。生成这些邮件没有问题。

一旦我向他们发送Send() 方法的每个调用,似乎都会发送单独的邮件。这意味着脚本连接到 SMTP 服务器,丢弃邮件然后断开连接。这非常耗时,因为我发送了数百封电子邮件。它会导致 PHP 执行时间溢出。这在使用大型附件时尤其成问题。

我想知道是否有更改首先将所有电子邮件发送到某种缓冲区或管道。循环结束后,仅建立一次连接。最好有某种后台工作来做这件事。

有什么想法吗?

【问题讨论】:

  • 您可以在表格中设置标志(或消息),并通过 cron 作业发送电子邮件。
  • 使用a job queue based solution。 IE。 不要尝试同步发送邮件。
  • @AD7six 这看起来很像我正在寻找的东西。谢谢。但是我知道对 CAKE 的控制台调用仍然会启动一个 PHP 进程。所以超时会再次出现。也许我只需要每 5 分钟对 50 封邮件进行计时,然后调用一个常规的 cron 作业。仍然丑陋....但向前迈进了一步。非常感谢所有回答的人。
  • cli php 进程默认没有时间限制。该插件实际上是一个守护进程——它会一直运行到没有要发送的邮件为止。我建议认真看一下被赞成的答案。
  • 啊。不知道那个。那么这似乎是最好的解决方案。谢谢!

标签: php email cakephp


【解决方案1】:

在 CakePHP 中使用Mail 传输并在您的网络服务器中设置您的后缀,作为您使用的 SMTP 服务器的中继。这种方法比你在 php 中可以做的任何其他方法都要快几个数量级。

【讨论】:

    【解决方案2】:

    只是为了理解概念。

    CakeEmail 只是发送电子邮件

    然后,您可能需要使用队列。

    有一个插件,结帐http://github.com/dereuromark/cakephp-queue

    你可能需要 CRON 来安排。

    【讨论】:

      【解决方案3】:

      不,the default SMTP adapter 不能这样做。

      您可以扩展 SMTP 适配器并覆盖它或根据需要更改它以实现该功能。

      PersistentStmpTransport extends SmtpTransport {
          /* ... */
      }
      

      快速浏览一下,这应该最多在 30-60 分钟内完成。顺便说一句,我认为你的论点是有效的,我很惊讶这还没有在实现的传输中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-04
        • 2012-05-24
        • 2011-05-26
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 2013-03-05
        相关资源
        最近更新 更多