Сколько времени выполнения функции mail() можно использовать за 30 секунд?

StackOverflow https://stackoverflow.com/questions/1670767

  •  13-09-2019
  •  | 
  •  

Вопрос

Я должен создать страницу, которая будет отправлять электронные письма подписчикам новостной рассылки.У нас более 14000 подписчиков.Я хочу использовать функцию php mail () для отправки им электронной почты.Но я боюсь, что он не сможет отправлять электронную почту всем подписчикам для ограничения максимального времени выполнения php 30sec.Невозможно проверить, сколько электронной почты может быть отправлено, отправив тестовое электронное письмо подписчикам.Итак, я хочу знать, сколько электронной почты может быть отправлено с помощью функции mail() за 30 секунд max_execution_time limit.Было бы очень полезно, если бы вы ответили мне.

также еще один вопрос - учитывается ли время выполнения mysql также в php?

Apache версии 2.2.13 (Unix) PHP версии 5.2.11

Это было полезно?

Решение

PHP - код max_execution_time настройка настраивается. 30 по умолчанию используется значение "секунды", но вы можете установить его равным 0 секунды - это вообще без ограничения по времени выполнения.Использование set_time_limit().

set_time_limit(0);

Если вы сделаете это, то сможете отправить всю свою электронную почту.

Пожалуйста, будьте осторожны при отправке более одного электронного письма на один и тот же почтовый сервер в секунду.Вы же не хотите попасть в черный список.

Другие советы

Вы должны запустить это из cronjob, или создать фоновую задачу, или использовать что-то другое, лучше подходящее для пакетных заданий.

Вы можете отправить 14000 писем за 30 секунд, если ваш почтовый сервер работает достаточно быстро, но что произойдет, когда у вас появится еще несколько подписчиков и он перестанет работать должным образом?

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

Это зависит от такого количества переменных, что однозначный ответ невозможен.Факторы включают в себя:

  1. Скорость работы процессора
  2. Пропускная способность, доступная от отправляющей системы к MTA
  3. Способность MTA принимать электронные письма

Единственный способ узнать это - попробовать.

Некоторое время назад у меня была именно такая проблема в одном из моих проектов.Решение состоит в том, чтобы изолировать отправку электронной почты от самого сайта.

Я закодировал небольшой класс, который вызывался бы для отправки электронного письма.Ему будет передано шаблонное электронное письмо, которое затем будет сохранено в базе данных в почтовой очереди.На серверной части у меня было задание cron, которое вызывало скрипт почтовой программы каждые X секунд.Скрипт просматривает очередь базы данных на наличие электронных писем, извлекает номер X из очереди, чтобы попытаться отправить (упорядоченный по временной метке в), затем попытается выполнить доставку.Предполагая, что ошибок не было выдано, скрипт пометит сообщение как отправленное.Следующим шагом было бы удалить из очереди все электронные письма, которые были отправлены и старше X дней (хранятся для протоколирования).

Надеюсь, это полезно.

Серьезно, если вы хотите отправить одно и то же письмо десяти людям из вашего обычного почтового приложения, вы обычно создаете десять одинаковых писем или просто отправляете письмо один раз, добавляя получателей в список отправленных?

Редактировать: Если ответ "Я отправляю это один раз", я думаю, вам следует посмотреть и здесь в этом направлении (даже описано, как отправлять нескольким получателям по адресу http://www.php.net/mail)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top