2009-08-27 2 views
1

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

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

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

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

+1

Альтернатива .. gammadyne mailer - http://www.gammadyne.com/mmail.htm Я ручаюсь за это. – madcolor

ответ

2

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

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

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

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


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

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

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

+0

SwiftMailer поставляется с плагином под названием «Throttler», посмотрите его документацию по адресу http://swiftmailer.org/docs/throttler-plugin-howto – VolkerK

2

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

+0

пользователю: кроме того, вы не можете позволить PHP-скрипту работать неограниченно - большинство серверов ограничивают время выполнения скрипта. – dusoft

0

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

0

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

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

Спасибо!

Смежные вопросы