Intereting Posts
Apache ssl redirect с помощью mod_rewrite Регулярные выражения Backreference Unix Эквивалент AF_UNIX для Windows В Python, как я могу получить удаленный IP-адрес пользователя (их последний прыжок), если они подключены через SSH? Поддерживает ли nginx HttpLimitReqModule поддержку в час / день / неделю? Отрегулируйте токены на незащищенных учетных записях (C, Windows) Добавить параметр URL во все маршруты с помощью промежуточного программного обеспечения Как исправить ошибку при использовании gitstats с git в windows Можете ли вы использовать multithreading в Java-платформе? Nginx configure: если не iPhone / iPad, то 301 перенаправить на https .htaccess URL переписать с помощью одной и двух строк строки запроса Установка Gearman на Ubuntu 10.04. Отсутствует форсированная библиотека Как исправить код запуска Unix nginx обратный прокси от рельсов до wordpress svn + apache для управления доступом к каталогам: странные разрешения (403 Запрещенная ошибка)

20 секунд Задержка при отправке электронной почты через почту () Apache + PHP5.3 + sendmail?

Сегодня я обнаружил, что моя контактная форма сайта занимает около 20 секунд, чтобы отправить электронное письмо на моем сервере Godaddy Centos VPS.

Я исследовал эту проблему и обнаружил, что источник вызван функцией PHP mail() . Когда я печатаю сообщение на странице контакта моего веб-сайта и нажимаю кнопку «Отправить», это занимает около 20 секунд до завершения загрузки страницы.

Создайте файл test.php со следующим кодом PHP для проверки почты:

  

Я выполнил команду: php test.php на сервере.

Я осмотрел /var/log/maillog и оказалось, что письмо было отправлено мгновенно без каких-либо задержек.

Задержка в 20 секунд произошла только тогда, когда я выполнил свой код через свой веб-сайт. Я предполагаю, что это имеет какое-то отношение к пользователю Apache, потому что командная строка с root пользователя может отправить сообщение без задержки.

Вот почтовый журнал, когда я отправляю сообщение через консоль с помощью root пользователя:

 Apr 10 14:57:04 ip-103-1-173-250 sendmail[27681]: r3ALv4i3027681: from=root, size=174, class=0, nrcpts=1, msgid=, relay=root@localhost Apr 10 14:57:05 ip-103-1-173-250 sendmail[27681]: r3ALv4i3027681: to=john23157@gmail.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30174, relay=myserver, dsn=2.0.0, stat=Sent (Accepted message qp 20459 bytes 684) 

Из соображений безопасности я заменил значение relay= значением myserver в этом сообщении.

Из вышеизложенного maillog ясно, что письмо было отправлено мгновенно, и я получил электронное письмо.

Вот почтовый журнал, когда я отправляю через контактную форму моего веб-сайта:

 Apr 10 14:54:22 myhostname sendmail[27655]: r3ALsMjV027655: from=support@mydomain.com, size=940, class=0, nrcpts=1, msgid=, relay=apache@localhost Apr 10 14:57:56 myhostname sendmail[27655]: r3ALsMjV027655: to=john23157@gmail.com, ctladdr=support@mydomain.com (48/48), delay=00:03:34, xdelay=00:03:34, mailer=relay, pri=30940, relay=myserver, dsn=2.0.0, stat=Sent (Accepted message qp 21186 bytes 1297) 

Вышеуказанный майолог показывает задержку в 3 минуты с половиной.

Я не знаю, что вызывает задержку при отправке через Apache.

Ваша помощь будет высоко оценена.

благодаря

Как говорит @ hek2mgl, к сожалению, большинство таких вещей вызвано сетевыми проблемами: один из почтовых серверов, входящих в цепочку, может быть перегружен, или какая-то часть сети может быть просто медленной в этот момент. Когда я разрабатывал свое собственное приложение PHP, у меня возникли аналогичные проблемы.

Поскольку у вас есть собственный VPS, я бы рекомендовал установить собственный SMTP-сервер. Я использовал PostFix , но есть и другие. Затем вы настраиваете его так, чтобы он заменял встроенную команду unix sendmail . Вы можете найти инструкции по установке постфикса в CentOS Wiki

Если это правильно настроено, вызов mail() из PHP добавит сообщение в очередь отправки в Postfix, вместо того, чтобы пытаться связаться с внешним почтовым сервером. Он немедленно вернется (это означает, что ваше приложение будет чувствовать себя намного быстрее), в то время как Postfix будет пытаться отправить электронное письмо в фоновом режиме столько, сколько потребуется.

Я нашел это решение для обмена экспертами, и он исправил эту точную проблему для меня.

— Вставить ниже —

Моя проблема заключалась в том, что Sendmail ищет полное доменное имя (FQDN), которого у меня не было в файле hosts. Как только я изменил это из этого:

127.0.0.1 localhost

127.0.1.1 веб-сервер

к этому:

127.0.0.1 localhost localhost.localdomain webserver

Я готов поспорить, что вы получили зарплату в течение недели, а это не вызвано функцией mail () PHP.

Функция mail () является простой оболочкой вокруг вызова exec, который вызывает интерфейс CLI для MTA. Простое выполнение программы вряд ли будет иметь такую ​​задержку – каждый раз, когда я сталкиваюсь с этой проблемой, это результат того, что MTA пытается синхронно разгружать сообщение и сталкиваться с проблемами (плохо настроенный DNS, отсутствующие интеллектуальные хосты , идентификационные запросы ….).

Поскольку это VPS, вы контролируете настройку MTA (неверно). И это тема для ServerFault – не Stackoverflow.

(Кстати, вы проверяли, что конфигурации были одинаковыми для CLI и веб-сервера SAPI? Вы пытались выполнить CLI с веб-сервера sapi?)