我应该如何处理多个单独的批处理电子邮件 'streams'?
How should I handle multiple seperate batch email 'streams'?
我在 Windows 服务器下设置了以下(简化的)批处理电子邮件流程:
- 用户执行了需要发送电子邮件的操作;
- 创建电子邮件所需的数据已插入 SQL 服务器 table;
- 每 6 小时一次,Task Scheduler 调用一个 PHP 文件,该文件通过 table,创建并发送每封未处理的电子邮件。
这非常有效,但是应用程序所有者希望更定期地发送某些类型的电子邮件,在本例中,每 20 分钟发送一次。
我的第一个想法是设置另一个任务计划程序条目,但这引发了每 6 小时发生一次的问题,此时两个任务将同时 运行。它还需要创建另一个 PHP 文件,这不是真正的问题,但很烦人。
我考虑的另一种选择是将调度程序设置为每 20 分钟一次,并将 'what do I send, and when' 逻辑合并到批处理文件本身中 - 如果是上午 12 点、上午 6 点、中午 12 点或下午 6 点,则执行两组电子邮件,否则只需执行 20 分钟。但是,那确实需要在那些时候进行硬编码,而且它似乎不应该是首选。
有没有更好的方法来完成这个?
再考虑一下后,我意识到我可以通过应用 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
}
通过获取自纪元以来的秒数,并检查我感兴趣的时间段内秒数的模数是否在一定范围内,我可以有很多不同的'streams'都出去在适当的时候。
我在 Windows 服务器下设置了以下(简化的)批处理电子邮件流程:
- 用户执行了需要发送电子邮件的操作;
- 创建电子邮件所需的数据已插入 SQL 服务器 table;
- 每 6 小时一次,Task Scheduler 调用一个 PHP 文件,该文件通过 table,创建并发送每封未处理的电子邮件。
这非常有效,但是应用程序所有者希望更定期地发送某些类型的电子邮件,在本例中,每 20 分钟发送一次。
我的第一个想法是设置另一个任务计划程序条目,但这引发了每 6 小时发生一次的问题,此时两个任务将同时 运行。它还需要创建另一个 PHP 文件,这不是真正的问题,但很烦人。
我考虑的另一种选择是将调度程序设置为每 20 分钟一次,并将 'what do I send, and when' 逻辑合并到批处理文件本身中 - 如果是上午 12 点、上午 6 点、中午 12 点或下午 6 点,则执行两组电子邮件,否则只需执行 20 分钟。但是,那确实需要在那些时候进行硬编码,而且它似乎不应该是首选。
有没有更好的方法来完成这个?
再考虑一下后,我意识到我可以通过应用 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
}
通过获取自纪元以来的秒数,并检查我感兴趣的时间段内秒数的模数是否在一定范围内,我可以有很多不同的'streams'都出去在适当的时候。