使用Symfony 2处理由500人组发送的数千封电子邮件

时间:2012-10-29 15:38:05

标签: email symfony cron swiftmailer

我正在使用Symfony 2.1框架和SwiftMailer的邮件工具。

这个工具需要处理成千上万的电子邮件,但由于smtp服务器约束(我无法修改它),因此需要500个组。它需要在每次浪潮之间等待几分钟。

我完全不知道该怎么做。

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

2 个答案:

答案 0 :(得分:1)

我在这里使用Symfony的内置Command组件。您可能熟悉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

答案 1 :(得分:1)

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