У меня есть машина 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()
делает.