Вопрос

На этот вопрос уже есть ответ здесь:

Как я могу проверить проблему с отправкой почты на моем сервере?Я запускаю простой тест:

if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}

какой тест выводит текст;но почта так и не приходит.

Как я могу отследить проблему?

Это было полезно?

Решение

Это довольно длинная история.Несколько пунктов (при условии, что mail() возвращает true и в журнале ошибок нет ошибок):

  • Принадлежит ли адрес отправителя («От») домену на вашем сервере?Если нет, сделайте это так.
  • Ваш сервер в черном списке (например.проверить IP на spamhaus.org)?Это удаленная возможность с общим хостингом.
  • Фильтруются ли письма спам-фильтром?Откройте учетную запись бесплатной почтовой программы, в которой есть папка со спамом, и узнайте.Также попробуйте отправить почту на адрес без спам-фильтра.
  • Возможно, вам нужен пятый параметр «-f» функции mail() для добавления адреса отправителя?(См. команду mail() в руководстве PHP)
  • Если у вас есть доступ к файлам журналов, проверьте их, конечно, как предложено выше.
  • Проверяете ли вы адрес «от:» на предмет возможных отказов («возвращено отправителю»)?Вы также можете настроить отдельный адрес «получателя ошибок».

Для говорящих по-немецки я некоторое время назад написал довольно исчерпывающее «что делать» по этому вопросу.Видеть здесь.

Другие советы

Следуя Майлсу, если вы используете Linux, сделайте это в командной строке:

# echo “Body text.” | mail -s “Hello world” you@example.com

Если вы не получили это письмо, значит, у вас проблема с почтовой системой этого ящика.Это другой вопрос, чем вопрос PHP, который вы задали.

Из руководства PHP:

Return Values

Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, **it 
does NOT mean the mail will actually reach the intended destination**.

Не знаю, как сделать следующий шаг, но это важный момент.

Если все действия по устранению неполадок не увенчались успехом (теперь предполагается, что mail() возвращает false по неизвестным причинам), переключитесь на сценарий рассылки, например PHPMailer это позволяет вам вообще обойти mail() и подключаться напрямую через SMTP, а также предлагает расширенный режим отладки.Таким образом, вы сможете либо найти работающее решение, либо найти суть проблемы.

В первую очередь я бы начал с журнала ошибок PHP, а затем с журнала sendmail.Также попробуйте отправить почту из командной строки и проверьте конфигурацию PHP, чтобы убедиться, что она настроена правильно для отправки почты.

Вы работаете здесь над живым веб-сервером или над чем-то большим, чем-то вроде песочницы для личного развития?(То есть, ваша домашняя машина?) Если последнее, я могу вам сказать, что в прошлом у меня было много проблем с моим интернет-провайдером (Cox), фильтрующим мои исходящие почтовые порты.(Они скажут вам, что они этого не делают, но я определенный они делают.)

Я также получил несколько исходящих сообщений, которые делал продержаться в катушке с почтой Cox на несколько дней, прежде чем они будут доставлены мне.

Надеюсь, это полезно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top