通过电子邮件发送给用户使用cron
为我们的网站,我们需要向客户发送有关我们活动的消息(而不是垃圾消息,他们可以退订,而且与问题无关)。我们必须在每天凌晨4点左右发送电子邮件,所以当然我想创建一个cron-job来调用发送电子邮件的url。然后我做了一些研究,看到同时发送给所有用户的电子邮件可能不是最好的选择,无论是由于服务器资源的浪费,还是我们被标记为垃圾邮件网站的可能性,所以我认为关于做这样的事情:通过电子邮件发送给用户使用cron
创建一个调用PHP脚本(script1.php) 的脚本会每10分钟执行,并调用另一个脚本(script2.php) script2.php一个cron cron作业 检查是否有任何用户未被邮寄,如果存在,它会对数据库进行查询并检索尚未邮寄的x条目 将邮件发送给这些用户 更新数据库标志以便他们赢得如果不会再发邮件给 那么它将“邮件发送”标志设置为其默认值,并删除新的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)命令来等待下一批。工程测试服务器
上感谢所有谁回答
首先没有得到,为什么你想有2个脚本。第二个是多余的。 你的想法很好。我只会添加一些更正。 发送此电子邮件时,不要使用简单的标志使用商店数据。这样你就可以控制通知的周期性,并且如果你的cronjob在某一天没有发送电子邮件而不是看到剩下的日子。在这种情况下,您根本不需要重置标志。
是的,注意到第二个脚本是不需要的。存储的数据将如何显示? – Raz 2010-11-19 08:19:50
您不需要让该脚本创建另一个cron作业。只需要一个脚本并设置它,以便它可以接受启动和限制参数。然后只需在特定时间内每x分钟调用一次该脚本。只有当你需要有人发送时才发送。也不要通过URL调用它。在服务器本身上创建一个脚本。 - 或者 - 如果您想为自己节省麻烦:请查看电子邮件服务提供商,它将为您处理所有这些问题。 :) – Cfreak 2010-11-18 16:43:01
你能解释一下script1.php的作用吗?你的意思是“脚本创建一个cron”?为什么它必须调用另一个脚本? – stillstanding 2010-11-18 16:45:03
@Raz - 在serverfault上搜索'mailq',旨在将邮件推送到队列中,并且每当有空闲插槽时服务器将清除它。 – ajreal 2010-11-18 16:47:11