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

Доставка электронной почты с помощью Sendmail имеет необычный тайм-аут

У меня есть машина Ubuntu с Sendmail.

Всякий раз, когда я запускаю функцию PHP mail (), электронное письмо доставляется мгновенно (получено в моем почтовом ящике в другом домене), но процесс PHP очень-очень долго ждет около 1 минуты, прежде чем вернет истину.

Это очень раздражает, так как кажется, что браузер зависает.

Что могло быть не так?

Первое, что нужно проверить на длительные задержки при выполнении сетевых запросов, - это проблемы с DNS. Попробуйте поискать DNS на вашем компьютере, например nslookup otherserver.foo.com. На удаленной машине попробуйте тот же поиск, что и на локальной машине. Попробуйте выполнить DNS-поиск IP-адреса и посмотрите, не что-то не так с обратным поиском.

Возникает ли эта задержка, если вы отправляете письмо прямо на машину, например:

mail -s "test message" user@example.com </dev/null

Я не знаю, как работает функция php mail (). Вам нужно выяснить, как именно он вызывает sendmail на машине - есть ли что-то в том, как он это делает, что заставляет процесс sendmail отправлять maiul, а затем долго сидеть и ничего не делать после этого?

Проверьте /var/log/sendmailи /var/log/messages на вашем компьютере, чтобы увидеть, есть ли в журналах какие-либо интересные сообщения sendmail.

Это правда sendmail вы установили? Я думал, что Ubuntu установлен postfix по умолчанию? В любом слючае, sendmail сам по себе сложно настроить и еще сложнее отладить проблемы с этим. Поэтому я бы рекомендовал перейти на другой MTA. Программы, пытающиеся отправить почту, не заметят разницы.

Во-вторых, PHP mail() функция, как известно, суетлива и пытается сделать некоторые вещи за вас. Это особенно важно, если вы не предоставили достаточно параметров заголовка, потому что это оставляет часть предположений на усмотрение MTA. Я предлагаю вам найти PHPMailer или похожие. У него гораздо лучший API, который дает вам гораздо больший контроль над тем, что происходит, и устанавливает гораздо более разумные значения по умолчанию, чем mail() делает.