对于我们的网站,我们需要向客户发送有关我们活动的新闻(不是垃圾邮件,他们可以取消订阅,而且与问题无关)。我们必须每天凌晨4点左右发送电子邮件,所以我自然而然地想要创建一个调用发送电子邮件的URL的cron-job。然后我做了一些研究,发现同时向所有用户发送电子邮件可能不是最好的选择,因为服务器资源占用,或者我们可能被标记为垃圾网站,所以我想做这样的事情:
创建一个调用php脚本的cron作业(script1.php) 该脚本创建一个每10分钟执行一次的cron并调用另一个脚本(script2.php) script2.php 检查是否有任何用户没有被邮寄,如果有,它会对数据库进行查询并检索尚未邮寄的x个条目 将邮件发送给这些用户 更新数据库标志,以便不再通过电子邮件发送它们 如果没有,则将“mail sent”标志设置为默认值,并删除新的cron(每10分钟运行一次)或用默认值覆盖它(每天凌晨4点)
对于代码,script2看起来像这样:
$unsentEmails = $users->getUnsentEmails($limit);
if ($unsentEmails != 0 ){
mailer::sentEmails($emailData);
$user->markSentNewsletter($userData);
}
else{
utils::resetCronTab();
$user->resetSentNewsletter();
}
抱歉代码不足,但我想弄清楚我想做的是这个场景中的最佳解决方案。此外,由于所发送信息的性质,我试图避免使用外部服务。
任何帮助将不胜感激
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
我认为我找到了一个更好的解决方案,因为我已经在cli上使用php了,我做了一个调用脚本的cron,在脚本中我发送了几封电子邮件,然后使用sleep($ seconds)命令等待下一批。适用于测试服务器
感谢所有回答的人
答案 0 :(得分:1)
首先,你不知道为什么要有2个脚本。第二个是多余的。 你的想法很好。我只想补充几点。 此电子邮件发送时,不使用简单标志,而是使用商店数据。通过这种方式,您将能够控制通知的周期性,如果您的cronjob在特定日期没有发送电子邮件,那么它将会看到剩下的日期。在这种情况下,您根本不需要重置标志。