#loops #email #server #timeout #phpmailer
#циклы #Адрес электронной почты #сервер #Тайм-аут #phpmailer
Вопрос:
Я использую PHPMailer в цикле while. В основном я отправляю около 80 электронных писем, и каждое электронное письмо отличается. Поэтому я использую цикл while для отправки каждого письма по отдельности. Проблема в том, что это занимает так много времени, что время ожидания моего сервера истекает. Сейчас я разговариваю со своим сервером, чтобы увеличить лимит времени, но я сомневаюсь, что он собирается это сделать.
Что я могу сделать?
Ответ №1:
Вообще говоря, избегайте отправки электронной почты во время обработки HTTP-запроса. Как вы уже выяснили, в конце концов время ожидания истечет. Есть некоторые меры, которые вы можете предпринять, чтобы уменьшить это, но вы не избавитесь от этого полностью:
- Увеличьте время ожидания
- Отправка быстрее, например, путем ретрансляции через локальный почтовый сервер
Правильный способ исправить это — инициировать отправку ваших сообщений только во время HTTP-запроса и выполнять фактическую отправку с помощью задания cron или другой запланированной или поставленной в очередь задачи, которая выполняет фактическую отправку. Таким образом, ваш триггер выполнит что-то небольшое и простое, например, обновит временную метку «время отправки» в записи списка рассылки, затем попросит вашу запланированную задачу проверить, есть ли вещи, которые должны быть отправлены, отправить их, а затем пометить их как отправленные, чтобы последующие HTTP-запросы могли видеть статус отправить.
Существует пример отправки в список рассылки, включенный в PHPMailer, и это было бы именно то, что вы хотите запустить. Обратите внимание, что этот код не содержит никаких ссылок на $_GET
, $_POST
, или любой другой пользовательский ввод, он основан исключительно на том, что есть в базе данных.
Комментарии:
1. Спасибо за ответ. К сожалению, я использую некоторые данные $ _get. У меня была идея создать кнопку, на которую можно нажать, чтобы запустить цикл phpmailer, отправив только одно электронное письмо, а затем обновив страницу. Он $_ получит последний номер записи (отправленное электронное письмо) и продолжит обновлять страницу, пока не останется больше писем для отправки. Могут ли быть проблемы с этой идеей?
2. Хитрость заключается в том, чтобы взять данные $ _GET и вставить их куда-нибудь в свою базу данных, а затем использовать их в задании отправки. Ключ заключается в разделении его на эти два процесса, поскольку это устраняет проблему с обновлением / таймаутом.
3. Спасибо, очень ценю ваше время для ответа. Я попробую.