Устранение неполадок PHP Mail
Как я могу проверить проблему с отправкой почты на моем сервере? Я запускаю простой тест:
if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}
какой тест выводит текст; но почта никогда не приходит.
Как я могу отследить проблему?
6 ответов
Это довольно длинная история. Несколько ключевых пунктов (при условии, что mail() возвращает true и в журнале ошибок нет ошибок):
- Адрес отправителя ("От") принадлежит домену на вашем сервере? Если нет, сделайте это так.
- Ваш сервер находится в черном списке (например, проверьте IP на spamhaus.org)? Это удаленная возможность с общим хостингом.
- Фильтруются ли письма фильтром спама? Откройте аккаунт в freemailer, в котором есть папка для спама, и узнайте. Также попробуйте отправить почту на адрес без спам-фильтра.
- Возможно, вам нужен пятый параметр "-f" mail() для добавления адреса отправителя? (Смотрите команду mail() в руководстве по PHP)
- Если у вас есть доступ к файлам журналов, проверьте их, конечно, как предложено выше.
- Проверяете ли вы адрес "от:" на предмет возможной пересылки писем ("Возвращено отправителю")? Вы также можете настроить отдельный адрес для ошибок.
Для носителей немецкого языка я написал довольно исчерпывающее "что делать" по этому вопросу некоторое время назад. Смотрите здесь.
После Myles, если вы используете 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. Также попробуйте sendmail из командной строки и проверьте конфигурацию PHP, чтобы убедиться, что она правильно настроена для отправки почты.
Вы работаете над живым веб-сервером здесь или над чем-то более похожим на личную песочницу разработки? (То есть, ваш домашний компьютер?) Если это последний, я могу сказать вам, что у меня было много проблем в прошлом с моим ISP (Cox), фильтрующим мои порты исходящей почты. (Они скажут вам, что они этого не делают, но я уверен, что они делают.)
Я также получил некоторые исходящие сообщения, которые действительно прошли через него, за несколько дней до того, как их доставили мне.
Я надеюсь, что это полезно.