Php Mailer имеет так много писем, что время ожидания моего сервера истекло

#loops #email #server #timeout #phpmailer

#циклы #Адрес электронной почты #сервер #Тайм-аут #phpmailer

Вопрос:

Я использую PHPMailer в цикле while. В основном я отправляю около 80 электронных писем, и каждое электронное письмо отличается. Поэтому я использую цикл while для отправки каждого письма по отдельности. Проблема в том, что это занимает так много времени, что время ожидания моего сервера истекает. Сейчас я разговариваю со своим сервером, чтобы увеличить лимит времени, но я сомневаюсь, что он собирается это сделать.

Что я могу сделать?

Ответ №1:

Вообще говоря, избегайте отправки электронной почты во время обработки HTTP-запроса. Как вы уже выяснили, в конце концов время ожидания истечет. Есть некоторые меры, которые вы можете предпринять, чтобы уменьшить это, но вы не избавитесь от этого полностью:

  • Увеличьте время ожидания
  • Отправка быстрее, например, путем ретрансляции через локальный почтовый сервер

Правильный способ исправить это — инициировать отправку ваших сообщений только во время HTTP-запроса и выполнять фактическую отправку с помощью задания cron или другой запланированной или поставленной в очередь задачи, которая выполняет фактическую отправку. Таким образом, ваш триггер выполнит что-то небольшое и простое, например, обновит временную метку «время отправки» в записи списка рассылки, затем попросит вашу запланированную задачу проверить, есть ли вещи, которые должны быть отправлены, отправить их, а затем пометить их как отправленные, чтобы последующие HTTP-запросы могли видеть статус отправить.

Существует пример отправки в список рассылки, включенный в PHPMailer, и это было бы именно то, что вы хотите запустить. Обратите внимание, что этот код не содержит никаких ссылок на $_GET , $_POST , или любой другой пользовательский ввод, он основан исключительно на том, что есть в базе данных.

Комментарии:

1. Спасибо за ответ. К сожалению, я использую некоторые данные $ _get. У меня была идея создать кнопку, на которую можно нажать, чтобы запустить цикл phpmailer, отправив только одно электронное письмо, а затем обновив страницу. Он $_ получит последний номер записи (отправленное электронное письмо) и продолжит обновлять страницу, пока не останется больше писем для отправки. Могут ли быть проблемы с этой идеей?

2. Хитрость заключается в том, чтобы взять данные $ _GET и вставить их куда-нибудь в свою базу данных, а затем использовать их в задании отправки. Ключ заключается в разделении его на эти два процесса, поскольку это устраняет проблему с обновлением / таймаутом.

3. Спасибо, очень ценю ваше время для ответа. Я попробую.