Sendmail через SMTP душит мой PHP-скрипт... Как мне заставить его вести себя?

Вот ситуация: у меня есть сервер Redhat Linux с PHP 5.2 и стандартным sendmail, который мы используем для отправки электронной почты на список из 10000 адресов электронной почты. У нас есть довольно простой скрипт, который использует PHPMailer и подключается через SMTP к слушающему демону sendmail.

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

На сервере sendmail я добавил в скрипт несколько настроек, чтобы попытаться устранить проблему регулирования:

define(`confMAX_QUEUE_RUN_SIZE',`0')dnl
define(`confBAD_RCPT_THROTTLE', `0')dnl
define(`confCONNECTION_RATE_THROTTLE', `0')dnl

Пока что я не уверен, что это лучший способ решить проблему - или даже устранить ее. Файл / var / log / maillog на самом деле не содержит никакой полезной информации.

У нас есть этот экземпляр sendmail за брандмауэром, поэтому нам не нужно беспокоиться о безопасности... просто откройте его и дайте потоку почты!

2 ответа

Вы не должны подключаться к удаленному SMTP по сценарию, а доставлять на локальный хост с помощью sendmail (или, лучше, postfix). Sendmail должен позаботиться о доставке сообщений. Если вам необходимо убедиться, что все сообщения проходят через определенный компьютер шлюза, настройте sendmail с правильным smarthost.

Причина, по которой вы хотите это сделать, заключается в том, что отправка почты гораздо сложнее, чем вы могли подумать, и sendmail (или, лучше, postfix) создан для обработки всех деталей, таких как управление очередью.

Что касается того, что происходит на самом почтовом сервере, проверили ли вы нагрузку и другие факторы на этом сервере? Он может быть перегружен после того, как вы отправили ему столько сообщений, и из-за этого он работает очень медленно. Проверяйте такие вещи, как top, netstat -n и т. Д.

Возможно, вы захотите попробовать увеличить детализацию журнала в sendmail. Это может дать вам еще несколько подсказок.

Возможно, вам придется попытаться определить, идет ли задержка со стороны PHP или со стороны sendmail.

Когда он замедлится, запустите netstat и посмотрите, какие порты открыты.

Дважды проверьте DNS. Убедитесь, что ваш сервер может быстро разрешать доменные имена. Часто я запускаю кеширующий DNS-сервер локально при отправке больших объемов электронной почты.

Я не использовал PHPMailer таким образом, но я смог просто вызвать /usr/sbin/sendmail через скрипт php, как увидеть 600+ сообщений в минуту на скромном оборудовании.

Другие вопросы по тегам