Назад | Перейти на главную страницу

Sendmail медленно принимает электронные письма

У меня есть веб-приложение PHP, которое использует SMTP для отправки почты на localhost отправить электронное письмо.

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

Sendmail устанавливается с настройками по умолчанию на веб-серверах RHEL.

Иногда sendmail блокируется на долгое время после MAIL команда отправлена ​​- иногда на прием почты уходит 60 или 90 секунд. Время обычно очень близко к 60 или 90 секундам, что заставляет меня думать, что это какой-то тайм-аут.

Я просмотрел журналы sendmail, и там много «отложенных» писем, но ничего, что могло бы вызвать эту задержку.

  1. Как я могу определить, что тормозит sendmail?
  2. Как мне настроить 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 похоже, может нормально (большую часть времени) справляться с тем же объемом электронных писем, не блокируя их вообще. Однако иногда он блокируется, что делает его непригодным в качестве уровня очереди электронной почты.