Устранение неполадок PHP Mail

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

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

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

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

Ответ 1

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

  • Относится ли адрес отправителя ( "От" ) к домену на вашем сервере? Если нет, сделайте это так.
  • Является ли ваш сервер черным списком (например, проверьте IP-адрес на spamhaus.org)? Это удаленная возможность с общим хостингом.
  • Отфильтрованы ли письма фильтром спама? Откройте учетную запись с freemailer с папкой спама и узнайте. Кроме того, попробуйте отправить почту на адрес без спам-фильтра.
  • Возможно, вам нужен пятый параметр "-f" почты(), чтобы добавить адрес отправителя? (См. Команду mail() в руководстве по PHP)
  • Если у вас есть доступ к файлам журналов, проверьте их, как указано выше.
  • Вы проверяете адрес "from:" для возможных отказов ( "Возврат отправителю" )? Вы также можете настроить отдельный адрес "error-to".

Для немецких ораторов я написал довольно исчерпывающее "что делать" по этому вопросу некоторое время назад. См. здесь.

Ответ 2

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

# echo "Body text." | mail -s "Hello world" [email protected]

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

Ответ 3

Из руководства по 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**.

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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