2

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

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

我完全不知道该怎么做。

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

4

2 回答 2

1

我会在这里使用 Symfony 的内置命令组件。您可能熟悉 Symfony 附带的普通命令......诸如app/console generate:bundle等之类的东西。

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

以下是您需要采取的步骤:

  • 保留需要发送的电子邮件队列(可能在数据库表中)
  • 创建一个扩展 ContainerAwareCommand 的类,并使命令名称类似于“email:send:partial”
    • 此类应检查数据库中是否存在未发送的电子邮件。如果有的话,它应该发送最多 500 条,然后删除或更新数据库中的记录以反映它们已发送的事实。
    • 顺便说一句,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

于 2012-10-29T15:54:27.573 回答
1

你可以在 Symfony Cookbook 的How to Spool Email部分找到这个问题的解决方案。

于 2012-10-29T17:33:12.030 回答