2012-03-28 3 views
0

У меня странная проблема с электронной почтой. В частности, у меня есть скрипт, который проверяет заголовок запроса, и если он соответствует определенной строке, он отправляет почту, используя mail(). Это базовая почта со стандартными полями «to», «subject», «content», «from» и ничем иным.PHP-замедление почты висит на странице

Почта отправляется в порядке, но это вызывает загрузку страницы в течение 30 секунд (даже с mail() вне сгенерированного HTML), слишком долго. Я видел некоторые ответы, предлагающие выгружать письма в db и запускать на нем работу cron, но это не совсем вариант в этой ситуации.

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

ответ

0

У меня была аналогичная проблема на сервере RHEL 4, и я нашел два решения, которые работали: используя почту PEAR или внешний SMTP-сервер (gmail в моем случае). Отправка простой формы контакта длилась от 30 до 50 секунд до менее секунды.

Я никогда не узнал, что его причиной ...

0

Никогда не было проблем с mail(), я нахожу это очень надежным.

  • Проблема возникает во всех сообщениях электронной почты или специфическими?
  • Вы пытались протестировать код на другом сервере?
  • Используйте PHPmailer() от here в качестве альтернативы (если возможно) с помощью SMTP. Here - хороший учебник.


+0

Проблемы возникают в любых PHP созданных электронных писем с помощью 'почты)' функцию (. Сама настройка сервера является «интересной», если не сказать больше, и я не удивлюсь, если ограничения сервера будут причиной замедления. Я не решаюсь перерабатывать слишком много самого сервера, поскольку его заменяют через 4-6 месяцев - это скорее вопрос «сделайте эту работу на данный момент», чем что-либо еще. – SickHippie

0

Когда у меня была аналогичная проблема, это было вызвано отсутствием канонического имени хоста.

Посмотрите /var/log/mail.err: если вы видите

Sendmail [31575]: не в состоянии квалифицировать мое собственное доменное имя (LOCALHOST) - используя короткое имя»

то это он

Тогда вам нужно:

  1. Добавить имя хоста /etc/hosts как: your.ip.address your.host.name
  2. Установите имя хоста в /etc/hostname как: your.host.name
  3. Reboot
Смежные вопросы