email - 使用 Symfony 2 处理以 500 人为一组发送的数千封电子邮件

标签 email symfony cron swiftmailer

我正在使用 Symfony 2.1 框架和 SwiftMailer 开发一个邮件工具。

由于 smtp 服务器限制(我无法修改它),该工具需要处理数千封电子邮件,但以 500 封为一组。每波之间需要等待几分钟。

我完全不知道该怎么做。

运行应用程序的服务器位于装有 Apache 和 PHP 5.4 的 Windows 计算机上。我可以使用 CRON 任务,但我没有找到任何有关 CRON 和 Symfony 的信息(我发现 Symfony 1.1 也有,不是最新的)。

最佳答案

我在这里使用 Symfony 的内置命令组件。您可能熟悉 Symfony 附带的普通命令...例如 app/consolegenerate:bundle 等。

您可以使用 ContainerAwareCommand 类来编写自己的类。

以下是您需要执行的步骤:

  • 保留需要发送的电子邮件队列(可能在数据库表中)
  • 创建一个扩展 ContainerAwareCommand 的类,并将命令名称命名为“email:send:partial”
    • 此类应检查数据库中是否存在未发送的电子邮件。如果有的话,它应该发送最多 500 个,然后删除或更新数据库中的记录以反射(reflect)它们已发送的事实。
    • 顺便说一句,ContainerAwareCommand 当然是容器感知的……这意味着它可以访问 Monolog、Twig 等服务,而且最重要的是 Doctrine。因此,您将能够使用 $this->getContainer()->get("doctrine") 从数据库表中检索未发送的电子邮件。
  • 在 cron 中,使用邮件服务器提供的时间间隔设置常规作业(加上一两分钟以考虑执行延迟)。命令为 /path/to/symfony/app/console email:send:partial

这应该可以帮助你到达那里。以下是 ContainerAwareCommand 类的一些引用:

http://symfony.com/doc/2.0/cookbook/console/console_command.html

http://api.symfony.com/2.1/Symfony/Bundle/FrameworkBundle/Command/ContainerAwareCommand.html

关于email - 使用 Symfony 2 处理以 500 人为一组发送的数千封电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124819/

相关文章:

java - 如何在 @Scheduled 注释中指定 PST 时区,该注释应在太平洋标准时间上午 7 点到下午 6 点之间每小时触发一次?

sql-server - 调用 sp_send_dbmail 的存储过程

symfony - 如何使用 Symfony 控制台初始化 :bundle?

node.js - Heroku 上的 Node 调度(不是 Heroku 的 Scheduler 插件)

php - Symfony2.8升级到Symfony3.0时如何设置新的目录结构?

php - 扩展 Twig 的 AppVariable

php - 在 linux/apache 服务器上的 cron 作业上运行 script.php,但限制对 php 文件的公共(public)访问

email - 从 Outlook::Attachment(嵌入式电子邮件)获取 Outlook::_MailItem

email - 使用 Gmail API 发送的邮件中缺少附件,但仅适用于收件人

php - 带有 curl 命令的 cron 守护进程正在发送空电子邮件