【发布时间】:2013-08-22 22:19:24
【问题描述】:
我正在尝试基于 Symfony2 和 Swiftmailer 向大约 17.000 人发送每周时事通讯。我目前的问题是,我为控制台编写了一个命令。例如,我可以通过“php app/console mail:send --newsletter 0 500”来调用它。最后两个数字是偏移量和应立即选择的收件人数量的附加变量。我通常想做的是使用一个 cronjob,它调用这个命令一次,在这种情况下,偏移量为 0,数量为 20.000 以获取所有收件人。这是行不通的,或者至少邮件数量太大了。我的第一个测试是自己发送这些邮件,这样我就可以看到发生了什么。直到我达到 500 或更少的数量,脚本才结束。这正常吗?
这是我的工作:
- 从数据库中获取用户
- 从数据库中查找我想在此时事通讯中发送的文章
- 遍历所有收件人,通过 $message = \Swift_Message::newInstance()... 生成新消息并调用 $this->mailer->send($message);
-
最后通过这样做刷新队列:
$spool = $this->mailer->getTransport()->getSpool(); $transport = $this->getContainer()->get('swiftmailer.transport.real'); $spool->flushQueue($transport);
我不确定现在应该如何发送所有这些邮件。仅使用 cronjob 调用 shell 脚本是否错误,该脚本通过更改偏移量来迭代此命令,以便一次仅生成 500 封邮件?或者这样做的正确方法是什么?还是我做错了,这就是为什么我不能发送超过 500 个?以 1000 为例,在我取消脚本之前,控制台不再做出反应。我已经尝试在后台启动它,但脚本似乎根本不起作用......并且没有发生错误或类似的事情,只是没有反应。
编辑: 或者使用特定邮箱发送所有这些邮件,而不是使用带有 mail() 函数的 PHP 更好,这可能也在 SwiftMailer 中使用? p>
非常感谢您的帮助! 曼努埃尔
【问题讨论】:
-
不是一次执行超过 500 封邮件的队列是正常的。当来自同一来源的邮件过多时,大多数邮件服务器将拒绝投递邮件。我在 Symfony 1.4 中有一个项目,我们在十分钟内发送了 500 封邮件,效果很好。
-
所以您的通话之间有延迟?但是您有 1 个 cronjob 或许多 cronjobs 延迟 10 分钟?
标签: php email symfony swiftmailer