mail () тайм-аут

Когда я выполняю свой скрипт электронной почты через браузер, возвращается фатальная ошибка (если я не увеличиваю время выполнения, то он будет работать нормально, а не решение, которое я ищу). Электронная почта отправляется tho , но она берет навсегда (5 минут в среднем), чтобы прибыть (в мой почтовый ящик)!
(Учитывая, что через командную строку он отлично работает, я думаю, что SMTP на php.ini, безусловно, хорошо настроен.)

Таким образом, это код, выполняемый запросом браузера:

<?php mail('amatos@example.com', 'test subject', 'test body', 'From: Andre Matos <amatos@example.com>'); ?> 

и когда я запускаю это же (действительно ли это то же самое? Я начинаю сомневаться в себе) код через командную строку:

 php -r "mail('amatos@example.com', 'test subject', 'test body', 'From: Andre Matos <amatos@example.com>');" 

он отлично работает! Скрипт работает, он останавливается, и сообщение электронной почты приходит мгновенно (2/3 секунды).

Итак, что может вызвать эту разницу и как ее исправить? Есть идеи?
Заранее спасибо.


[править] Дополнительная информация:
– машина – это окна
– сервер – localhost
– php.ini одинаково для браузера и для экземпляра cli


[Edit2]
Спасибо всем, что пытались угадать, в чем была проблема. Я поставил вопрос, скажем, что у кого-то была проблема раньше и что-то было известно. Учитывая, что ничего особенного не появилось, и ни одно из предложений действительно не сработало, я решил принять тот, который позволил мне сделать больше выводов о проблеме … +1 Для всех ваших полезных знаний / мыслей (/ догадок) 🙂

Solutions Collecting From Web of "mail () тайм-аут"

Я предположил, что некоторые кошки, но я использовал для linux и на окнах, которые я могу догадаться:

  1. php_cli и mod_php – это два разных бинарных файла, mod_php может быть слегка поврежден
  2. php_cli и mod_php используют 2 разных пользователя, может быть проблемой сетевой профиль пользователя apache (dns, firewall, proxy …)
  3. ваш php-скрипт находится в «проблемном» местоположении или содержит некоторый проблематичный характер, но ваш скрипт cli по параметру, попробуйте выполнить тот же скрипт: php -fz: \ path \ to \ php \ mail.php

Учитывая это примечание из http://php.net/manual/en/function.mail.php , кажется очень вероятным, что проблема связана с MTA, а не с PHP напрямую:

Реализация Windows mail () во многом отличается от реализации Unix. Во-первых, он не использует локальный двоичный код для составления сообщений, а работает только с прямыми сокетами, что означает, что MTA необходимо прослушивать в сетевом сокете (который может либо на локальном, либо на удаленном компьютере).

Возможно, это имеет какое-то отношение к тому, как MTA отвечает конкретному пользователю или правилам брандмауэра конкретного пользователя для исходящих почтовых подключений на вашем компьютере. Можете ли вы запустить командную строку как пользователь веб-сервера, а не самостоятельно? Если да, то это заново воссоздает проблему из командной строки?

Как насчет того, что веб-сервер выполняет PHP-версию командной строки, а не анализируемый PHP-файл? (Например, возможно, вы можете запустить пакетный скрипт через CGI.) Решает ли эта проблема?

(Извините, что это больше догадок, чем определенные ответы.)

Просто чтобы быть ясным: php-экземпляр, используемый сценарием, такой же, как тот, который используется кодом командной строки?

Многие веб-хосты используют smtp-relay, которые собирают кучу писем и отправляют их сразу, поэтому это не будет странным поведением, если ваша почта опаздывает. Однако длительное время выполнения не является нормальным.

Прежде чем отправлять почту в скрипте, обязательно распечатайте ini_get() переменных SMTP , smtp_port и sendmail_from и будьте уверены, что это рабочие значения. PHP, работающий в Windows, не имеет возможности отправлять почту через Sendmail, и все, что захочет PHP-разработчики, это в лучшем случае отрывочно.

Мне всегда нравится проверять почту через telnet, поэтому я могу проверить, не сообщает ли сервер ошибке, которая не возвращается должным образом клиенту:

 c:\> telnet smtp.domain.com 25 220 smtp.domain.com ESMTP Postfix helo mailtest 250 smtp.domain.com mail from: user@local.com 250 2.1.0 Ok rcpt to: user@remote.com 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> from: user@local.com to: user@remote.com subject: test mail this is a test message . 250 2.0.0 Ok: queued as 42AD8364FE0E quit 221 2.0.0 Bye 

Попробуйте указать имя пользователя и пароль для «От» почтового идентификатора. поэтому он может аутентифицироваться и быстро отправлять почту.

Вы пробовали PHP-почерк ?

В моих наблюдениях он отправляет письма в течение нескольких секунд. Ниже приведен пример быстрого изучения того, как использовать класс почтовой программы php.

 include "class.phpmailer.php"; $msg="Hello! This is a test..." $mail=new PHPMailer(); $email="someone@friend.com"; //person who receives your mail $mail->IsSMTP(); $mail->Host = "localhost"; $mail->SMTPAuth = true; $mail->Username = "admin@example.com"; //your mail id $mail->Password = "sdfsd441"; //password for your mail id $mail->SetFrom('admin@example.com', 'admin'); //from address $mail->AddAddress($email); $mail->Subject ="Test Mail"; $mail->Body = $msg; $mail->IsHTML(true); $mail->MsgHTML($msg); $mail->Send(); 

РЕДАКТИРОВАТЬ :
В руководстве по PHP они заявили вот так:

Реализация Windows mail () во многом отличается от реализации Unix. Во-первых, он не использует локальный двоичный код для составления сообщений, а работает только с прямыми сокетами, что означает, что MTA необходимо прослушивать в сетевом сокете (который может либо на локальном, либо на удаленном компьютере).

так что может вызвать задержку? Я думаю, эта ссылка может вам помочь.

Мое первое предположение было бы в том, что версия браузера вашей рассылки уже имеет контекст или соединения, готовые для отправки. Напротив, прямое (php -r) выполнение должно загрузить контекст почтовой рассылки.

Чтобы подтвердить эту идею, вы можете создать цикл для отправки 10 писем и проверить почту после первого намного быстрее.