Устранение неполадок 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 за несколько дней до того, как они были доставлены мне.
Надеюсь, что это полезно.