Сколько писем может отправлять PHP одновременно? - PullRequest
5 голосов
/ 30 ноября 2011

У меня более 4000 пользователей, которые подписались на еженедельные обновления по электронной почте.Чтобы отправить электронное письмо, я просто использую:

mail($to,$subject,$message,$headers);

, который прекрасно работает.Мой вопрос: сколько писем вы можете отправить одновременно ?Могу ли я отправить все 4000 сразу, пройдя через массив писем внутри цикла?Или это вызовет тайм-аут, когда только часть списка получает электронные письма?

Ответы [ 5 ]

7 голосов
/ 30 ноября 2011

Как правило, ваш лимит - это выделение памяти PHP и время ожидания скрипта, которые могут быть увеличены. Большим ограничивающим фактором являются спам-файрволы, которые обычно ограничивают количество писем, которые могут приходить с сервера и другого домена. Службы массовой рассылки используют интервалы для ограничения количества сообщений, отправляемых на любой данный домен в течение определенного периода времени.

3 голосов
/ 30 ноября 2011

PHP не имеет ограничений, и вы можете делать то, что говорите, и выполнять его в тесном цикле.

В Linux это sendmail или клон sendmail. Если он начинает перегружаться, он должен начать ставить в очередь ваши письма и доставлять их, когда это возможно. Для Windows у вас есть сокетное соединение, и я полагаю, что почтовый сервер может начать отказывать в соединениях, если он перегружен.

Если вы не торопитесь отправлять их все, рассмотрите спящий режим (2) между каждым вызовом mail (). Если все прошло гладко, попробуйте sleep (1) в следующий раз. Затем включите (500000) в следующий раз и т. Д. (ОБНОВЛЕНИЕ: следуя совету Мэтта, поместите set_time_limit (10) внутри цикла, чтобы избежать нехватки процессорного времени.)

Если вы хотите, чтобы они были разосланы еще быстрее, вы можете использовать несколько локальных реле. (В Windows вы могли бы справиться с этим, установив параметр SMTP php.ini; в Linux вы бы использовали одну из библиотек, которая отправляет электронную почту через сокет.) Или рассмотрите профессиональную службу рассылки почты, где они позаботятся обо всех этих проблемах для вас.

РЕДАКТИРОВАТЬ Только что увидел ваш комментарий о запуске его с вашего Mac. Я предположил ситуацию с сервером, с реальным почтовым сервером с глобальным IP. Если ваш Mac находится за брандмауэром, вы, скорее всего, настроены на пересылку всей электронной почты на ваш почтовый сервер интернет-провайдера. Ваш Интернет-провайдер может очень расстроиться из-за получения 4000 электронных писем от вас за короткий период времени. (Например, они могут предположить, что ваша машина была взломана вирусом, и отключить вас.) Кроме того, на виртуальном хостинге согласие не рассылать много писем часто является частью контракта. Так что будьте осторожны и там.

1 голос
/ 30 ноября 2011

Это не зависит от php, но это зависит от возможностей вашего сервера sendmail и поддержки вашего хостинг-провайдера по ограничению количества писем, которые вы можете отправлять за промежуток времени ..!PHP только помещает вашу электронную почту в очередь sendmail ...!

0 голосов
/ 30 ноября 2011

Дать точные цифры невозможно. Это зависит от вашего почтового сервера и максимального времени выполнения.Для отправки большого количества писем рекомендуется использовать " cron job "

0 голосов
/ 30 ноября 2011

Учитывая, что цикл будет последовательным, вы можете отправить их все сразу, зациклив.Это больше зависит от почтового сервера, чем от PHP.

Хотя если вы используете WAMP, то может вызвать проблему, потому что поведение mail () в Windows отличается.Вместо того чтобы разговаривать с MTA, он пытается использовать сокеты для доставки почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...