Я занимаюсь разработкой системы массовой рассылки. За один раз мы отправляем 2-4K электронных писем, почтовые контакты импортируются с использованием библиотеки PHPexcel при том же количестве электронных писем.
Прошлой ночью, когда мы отправляем 2k электронных писем, мы получаем ошибку «500 внутренних серверов».
Я думаю, что мне следует разработать новый процесс обработки электронной почты и импорта контактов, я прав? Если да, то как мне это сделать? Есть ли другой способ преодолеть такие 500 ошибок?
Сценарий PHP вызывается веб-браузером, и браузер загружает его в течение 5-10 минут, а затем возникает ошибка 500. Я использую библиотеку PHPMailer для отправки почты.
Вызов долгосрочного сценария PHP из веб-браузера не совсем то же самое, что запуск PHP в фоновом режиме. Это заблокирует поток Apache и, вероятно, будет зависеть от таймаутов, настроенных PHP. Я предполагаю, что тайм-аут истекает до завершения отправки.
Было бы лучше сделать это на кроне. Вот несколько общих указателей:
Это будет намного надежнее. Чтобы получить бонусные баллы, напишите веб-страницу, чтобы показать вам, какие электронные письма отправлены, а какие еще ожидают. Кроме того, вы можете использовать стороннюю почтовую систему, такую как MailChimp, повысить надежность доставки. Убедитесь, что все ваши получатели действительно выбрали получение электронной почты от вас.
Я предположил, что скрипт должен группироваться по 100 штук, запускаться в течение пяти минут, вызываться каждые десять минут и приостанавливаться на несколько секунд после каждой отправки — но это всего лишь примеры. Если вы не против отправить медленнее (например, в одночасье), вы можете изменить эти цифры в соответствии с вашими потребностями. Более медленная отправка обычно более надежна, поэтому сделайте это, если можете.
Других решений пока нет …