2009-11-01 5 views
10

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

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

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

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

ответ

13

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

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

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

+0

Возможно, это http://spamhaus.org/ – MiseryIndex

+0

Исправлено. Благодарю. –

+0

Не указан на spamhaus.org (phew!) Домен отправителя принадлежит серверу. Я пытался отправить несколько учетных записей электронной почты всем, кто не получил его. (.Mac, gmail, yahoo) Я просмотрю файлы журналов. Любой шанс, что вы знаете, где будут находиться почтовые журналы? Спасибо –

2

Из 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**. 

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

1

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

3

После Майлса, если вы на коробке Linux, сделать это в командной строке:

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

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

+0

Хммм, команда не найдена. Эхо "Текст кузова". | mail -s «hello world» [email protected] -bash: mail: command не найден –

+0

Как насчет 'какая почта' –

+0

odd - ничего не возвращено. –

2

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

+0

Я действительно пробовал htmlMimeMail5, который, как я думаю, также использует SMTP, но имел такую ​​же удачу. –

+0

Имеет ли класс режим отладки? Вы должны вернуть сообщения об ошибках SMTP, не проверяя журналы. PHPMailer определенно может. –

1

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

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

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

Смежные вопросы