Сон между вызовами Mail () в PHP - PullRequest
1 голос
/ 28 августа 2009

Как бы я отправил электронное письмо, скажем, 3000 получателей - с максимум 500 письмами / часами на мой выделенный IP? До сих пор я думал о том, чтобы отправлять каждое электронное письмо каждые 9 секунд, а это примерно 450 электронных писем в час ... но как я могу это сделать?

Мой план отправки писем будет следующим ...

$emails = ARRAY OF EMAILS, MYSQL RESULT
for($emails){
mail($subject,$row[email],$headers);
}

Это не сработает, неправильное утверждение, но в любом случае это понятие ...

Ответы [ 5 ]

3 голосов
/ 28 августа 2009

Что бы я сделал, это:

  • создать скрипт PHP, который запускается через cron один раз в час
  • этот скрипт отправляет только 450 электронных писем со своей скоростью
  • при отправке 450 писем скрипт умирает
  • и через некоторое время cron повторно запускает 450 других писем.

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

Если вы хотите поспать некоторое время между письмами, используйте функцию sleep; что-то между 2 и 5 секундами, вероятно, будет в порядке, чтобы быть уверенным, что вы запишете сценарий, часть из 450 писем будет завершена до того, как cron перезапустит скрипт.


И, думая об этом:

  • Вы должны поставить некоторые элементы ведения журнала на место: если кто-то жалуется, говоря, что он получил 10 электронных писем, это может помочь вам выяснить, почему.
  • Я бы не стал использовать функцию mail: есть множество других возможностей, использующих хорошо протестированные библиотеки и обеспечивающие множество функциональных возможностей, которые уже разработаны: не изобретайте колесо; -)

Вот несколько библиотек, о которых я могу подумать:

2 голосов
/ 28 августа 2009

Хранить Ваши сообщения для отправки в базу данных, отмечать сообщения, которые отправляются. В задании cron выберите некоторые из них, которые не были отправлены, и обработайте их. Частота выполнения задания cron определяет скорость отправки электронных писем.

1 голос
/ 28 августа 2009
0 голосов
/ 28 августа 2009

Спасибо за все ответы! Наилучшим способом, который я нашел, было на самом деле просто sleep () между вызовами, используя sleep (), так как я проверял 400 писем, это заняло 17 секунд:)

Маловероятно, что пользователь отправит более 450 пределов ... но если они это сделают, у меня будет оператор if до того, как while () завершит проверку, если есть более 450 строк, если это так, он будет спать между каждым. .. это работает без неудобных баз данных:)

Спасибо!

0 голосов
/ 28 августа 2009

Вы можете использовать этот очень удобный класс Timer, чтобы выполнить тяжелую работу за вас (запустить, остановить и получить истекшее время в вашем цикле и т. Д.): PHPClasses: Timer.php .

...