我该如何处理多个单独的批量电子邮件“流”?

时间:2015-08-13 04:15:30

标签: php email scheduled-tasks batch-processing

我在Windows Server下设置了以下(简化的)批量电子邮件流程:

  • 用户执行需要发送电子邮件的操作;
  • 创建电子邮件所需的数据将插入SQL Server表中;
  • 每6个小时一次,任务计划程序调用一个PHP文件,该文件通过表格,创建并发送每个未完成的电子邮件。

这非常有效,但应用程序所有者希望更频繁地发送某些类型的电子邮件,在这种情况下,每20分钟发送一次。

我的第一个想法是设置另一个任务计划程序条目,但这引发了每6个小时发生的事情的问题,此时两个任务将同时运行。它还需要创建另一个PHP文件,这不是一个真正的问题,但很烦人。

我考虑的另一个选择是将调度程序设置为每20分钟,并将“我要发送什么,什么时候”逻辑合并到批处理文件本身中 - 如果它在12 AM,6 AM,12 PM或6 PM执行两组电子邮件,否则只执行20分钟。但是,这确实需要硬编码,并且似乎不应该是第一个手段。

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

在考虑了一点之后,我意识到我可以通过应用PHP time()函数和一些模运算来完成我想要的东西:

$runTime = time();                //Set time the program was run, seconds since epoch
$modTimeHour = $runTime % 3600;   //3600 seconds in an hour
$modTimeTwenty = $runTime % 1200; //1200 seconds in twenty minutes

//Task Scheduler doesn't always run exactly on the dot, so give it some leeway
if ($modTimeHour < 5 || $modTimeHour > 3595) {  
     //send emails - category 1
}

if ($modTimeTwenty < 5 || $modTimeTwenty > 1195) {
    //send emails - category 2
}

通过获取纪元以来的秒数,并检查我感兴趣的时间段内的秒数的模数是否在一定范围内,我可以有许多不同的流&#39;所有人都在适当的时候出去。