有时我们需要发送许多电子邮件。我们选择 100 个用户,为每个用户创建邮件,发送邮件(添加到假脱机),制作$em->clear()
. 但即使在生产环境中,我们也不能发送超过 4000 封电子邮件:得到“无法分配内存”。
有什么正确的方法来做到这一点?将参数添加到我们的命令端执行它多次使用--skip=4000
?
有时我们需要发送许多电子邮件。我们选择 100 个用户,为每个用户创建邮件,发送邮件(添加到假脱机),制作$em->clear()
. 但即使在生产环境中,我们也不能发送超过 4000 封电子邮件:得到“无法分配内存”。
有什么正确的方法来做到这一点?将参数添加到我们的命令端执行它多次使用--skip=4000
?
我提到我的经验:我在资源非常有限的共享服务器上使用 symfony 和 SwiftMailer 发送了大约 8000 封个人电子邮件。我有一个包含用户的表,并创建一个任务或命令来进行分页查询,并通过我的任务中的参数传递页面大小。Y 每 30 分钟在 cron 作业上执行此任务或命令。您可以根据您的资源进行配置。使用查询页面大小,您可以管理要发送的电子邮件数量,使用 cron 作业,您可以管理批次之间的时间。我承认有更专业和更强大的解决方案,但这是我在资源有限的共享服务器上找到的唯一方法。
我们所做的,是我们将其线程化...所以,假设您有一个包含用户的表,并且您有一个 ID 和 EMAIL 列。我们假设以 0 结尾的 ID 的数量与以 1、2 等结尾的 ID 数量相同。
现在我们有了发送电子邮件的脚本,它只向以 0 结尾的人发送电子邮件,另一个脚本发送给 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
}
这不完全是您要问的,但至少这是我们为帮助“某些”负载问题所做的