Как мне обрабатывать несколько отдельных «потоков» электронной почты?

У меня есть следующий (упрощенный) пакетный процесс электронной почты, настроенный под Windows Server:

  • Пользователь выполняет действие, требующее отправки электронного письма;
  • Данные, необходимые для создания электронной почты, вставляются в таблицу SQL Server;
  • Раз в 6 часов планировщик задач вызывает PHP-файл, который просматривает таблицу, создавая и отправляя каждое из ожидающих сообщений.

Это работает довольно хорошо, однако владельцы приложений хотели бы, чтобы определенные виды писем рассылались более регулярно, в данном случае каждые 20 минут.

Моей первой мыслью было настроить еще одну запись в планировщике задач, но это поднимает вопрос о том, что происходит каждые 6 часов, когда обе задачи будут выполняться одновременно. Это также потребует создания другого PHP-файла, который на самом деле не является проблемой, но раздражает.

Другая альтернатива, которую я рассмотрел, состояла в том, чтобы установить планировщик на каждые 20 минут и включить логику «что я отправляю и когда» в сам пакетный файл — если 12:00, 6:00, 12:00 или 6:00 выполняют оба набора электронных писем, в противном случае просто выполните 20 минут. Это, однако, требует жесткого кодирования в те времена, и не похоже, что это должно быть первым средством.

Есть ли лучший способ сделать это?

0

Решение

Подумав об этом немного больше, я понял, что могу достичь того, что хотел, с помощью функции 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
}

Получив секунды с начала эпохи и проверив, находится ли по модулю количество секунд в интересующих меня периодах времени в определенном диапазоне, я могу получить множество различных «потоков», выходящих в нужное время.

1

Другие решения

Других решений пока нет …