для нашего сайта нам нужно отправлять клиентам новости о нашей деятельности (не спам, они могут отписаться, и это не связано с вопросом).Мы должны отправлять электронные письма примерно в 4 часа утра каждый день, поэтому, естественно, я подумал о создании cron-задания, которое вызывает URL, который отправляет электронные письма.Затем я провел небольшое исследование и увидел, что отправка электронных писем всем нашим пользователям одновременно может оказаться не самым лучшим вариантом либо из-за нехватки ресурсов сервера, либо из-за того, что мы будем помечены как спам-сайт, поэтому я подумалпримерно так:
создайте задание cron, которое вызывает скрипт php (script1.php), скрипт создает крон, который выполняется каждые 10 минут и вызывает другой скрипт (script2.php), проверяет script2.phpесли есть пользователи, которые не были отправлены по почте, если они есть, он выполняет запрос к базе данных и извлекает x записей, которые еще не были отправлены по почте, но отправляет письма этим пользователям, обновляет флаг базы данных, чтобы они не былиотправьте сообщение по электронной почте снова, если его нет, затем установит для флагов «почта отправлено» значение по умолчанию и удалит новый cron (тот, который выполняется каждые 10 минут) или перезапишет его значением по умолчанию (каждый день в 4 часа утра)
для кода, script2 будет выглядеть примерно так:
$unsentEmails = $users->getUnsentEmails($limit);
if ($unsentEmails != 0 ){
mailer::sentEmails($emailData);
$user->markSentNewsletter($userData);
}
else{
utils::resetCronTab();
$user->resetSentNewsletter();
}
извините за отсутствие сотрудничестваде, но я пытаюсь понять, является ли то, что я хочу сделать, лучшим решением в этом сценарии.Кроме того, из-за характера отправленной информации я стараюсь избегать использования внешних служб, если это возможно.
любая помощь будет оценена
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
думаю, я нашел лучшее решение для этого, так как я уже использовал php на cli, я сделал cron, который вызывает скрипт, и внутри скрипта я отправляю несколькопо электронной почте, затем используйте команду sleep ($ секунд), чтобы дождаться следующего пакета.работает на тестовом сервере
спасибо всем, кто ответил