有时我们需要发送许多电子邮件。我们选择100个用户,为每个用户创建邮件,发送它(添加到假脱机),制作$em->clear()
。但即使在生产环境中,我们也不能发送超过4000封电子邮件:“无法分配内存”。
这样做的正确方法是什么?添加参数到我们的命令端使用--skip=4000
执行多次?
答案 0 :(得分:2)
我们做什么,是我们的线程......所以,假设您有一个与您的用户相关的表,并且您有一个ID和EMAIL列。我们假设将有更多/更少的相同数量的ID以0结尾,而不是结束于1,2等。
现在我们的脚本发送电子邮件只发送电子邮件给结尾说零的人,另一个脚本发送给id字段以1结尾的人等等。例如,你使用参数来定义这个,让我们说你的脚本叫做“send-a-lot.php”,你将运行这10个命令:
php send-a-lot.php --ending-on=0
php send-a-lot.php --ending-on=1
php send-a-lot.php --ending-on=2
php send-a-lot.php --ending-on=3
php send-a-lot.php --ending-on=4
php send-a-lot.php --ending-on=5
php send-a-lot.php --ending-on=6
php send-a-lot.php --ending-on=7
php send-a-lot.php --ending-on=8
php send-a-lot.php --ending-on=9
在您的代码中,您希望执行以下操作:
if ($id % 10 == $endingOnParameter) {
// send the mail
}
这不完全是你所要求的,但至少我们所做的就是帮助“解决”一些负载问题
答案 1 :(得分:2)
我提到我的经历: 我使用symfony和SwiftMailer在资源非常有限的共享服务器上发送大约8000封个人电子邮件。我有一个用户表,并创建一个任务或命令,在其中进行分页查询,并通过我的任务中的参数传递页面大小。 Y每30分钟在一个cron作业上执行此任务或命令。您可以根据您的资源进行配置。使用查询页面大小,您可以管理将要发送的电子邮件数量,使用cron作业,您可以管理批次之间的时间。 我承认有更专业和更强大的解决方案,但这是我在资源有限的共享服务器上找到的唯一方法。