У меня есть веб-приложение PHP, которое использует SMTP для отправки почты на localhost
отправить электронное письмо.
Я хотел бы, чтобы sendmail немедленно принял почтовый запрос и поставил его в очередь для последующей отправки, поскольку я не хочу, чтобы потоки запросов, обращенные к пользователю, блокировались в электронных письмах.
Sendmail устанавливается с настройками по умолчанию на веб-серверах RHEL.
Иногда sendmail
блокируется на долгое время после MAIL
команда отправлена - иногда на прием почты уходит 60 или 90 секунд. Время обычно очень близко к 60 или 90 секундам, что заставляет меня думать, что это какой-то тайм-аут.
Я просмотрел журналы sendmail, и там много «отложенных» писем, но ничего, что могло бы вызвать эту задержку.
sendmail
?sendmail
всегда принимать почту немедленно и ставить ее в очередь для последующей отправки?Обновить: Я не уверен, но похоже, что это может быть связано с aol.com
адреса. Я сильно подозреваю что sendmail
выполняет некоторую блокирующую проверку адреса получателя на этапе принятия электронной почты для отправки. Как я могу это отключить, чтобы sendmail
не блокирует мои потоки пользовательского интерфейса?
Обновление 2: Такое случается только в часы пик. Возможно, у меня заканчивается sendmail
темы что ли? Как я могу это проверить?
Есть несколько параметров настройки sendmail, которые могут повлиять на начальную попытку доставки. Посмотри на Настройка Sendmail.
Я не смог исправить sendmail
, поэтому я написал очередь уровня приложения для хранения писем, прежде чем они попадут в sendmail
, что сводит на нет эту проблему для меня. Электронные письма помещаются в очередь на диске потоками веб-запросов, а затем один фоновый поток (на каждый веб-сервер) передает электронные письма в sendmail
из этой очереди.
Я добавил дополнительное ведение журнала и sendmail
по-прежнему периодически блокирует получение писем (теперь только на 5-15 секунд). я думал sendmail
был разработан, чтобы принимать все электронные письма немедленно, без блокировки, а затем пытаться доставить их конечному получателю в фоновом режиме в своей собственной очереди.
Частота медленных писем теперь намного ниже. Интересно, отчасти ли проблема в том, что sendmail
заканчивались потоки "получения".
В моей первоначальной настройке все потоки обработки запросов PHP передавали свои электронные письма в sendmail
(через SMTP), как только действие пользователя вызвало отправку электронного письма. В часы пик это должно было означать, что sendmail
параллельно получал множество писем. Время от времени он блокировался на 60-90 секунд (что было катастрофически для производительности моего приложения).
Теперь, когда я добавил эту очередь уровня приложения, которая направляет электронные письма в sendmail
не более 1 потока, sendmail
похоже, может нормально (большую часть времени) справляться с тем же объемом электронных писем, не блокируя их вообще. Однако иногда он блокируется, что делает его непригодным в качестве уровня очереди электронной почты.