2009-11-01 9 views
10

서버에서 메일을 보내는 데 문제가 있는지 어떻게 확인할 수 있습니까? 나는 간단한 테스트 실행 테스트 텍스트를 출력PHP 메일 문제 해결

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

을; 그러나 아무런 메일도 도착하지 않습니다.

어떻게 문제를 추적 할 수 있습니까? PHP 매뉴얼에서

답변

13

꽤 긴 이야기입니다. mail()이 true를 반환하고 오류 로그에 오류가 없다고 가정하면 몇 가지 사항이 있습니다.

  • 보낸 사람 주소 ("보낸 사람")가 서버의 도메인에 속해 있습니까? 그렇지 않다면 그렇게하십시오.
  • 서버가 차단 목록에 있습니까 (예 : spamhaus.org의 IP를 확인하십시오)? 이것은 공유 호스팅을 통한 원격 가능성입니다.
  • 메일이 스팸 필터로 필터링됩니까? 스팸 폴더가있는 freemailer와 계정을 열고 찾아보십시오. 또한 스팸 필터없이 주소로 메일을 보내보십시오.
  • 발신자 주소를 추가하려면 mail()의 다섯 번째 매개 변수 "-f"가 필요합니까? (PHP 매뉴얼의 mail() 명령어를 참조하십시오.)
  • 로그 파일에 접근 할 수 있다면 위의 제안대로 확인하십시오.
  • 바운스 메일의 "보낸 사람 :"주소를 확인 하시겠습니까 ("발신인에게 반송 됨")? 별도의 "오류 발생"주소를 설정할 수도 있습니다.

독일인 용으로 필자는 얼마 전이 문제에 대해 "포괄적 인"취지를 작성했습니다. here을 참조하십시오.

+0

아마도 http://spamhaus.org/ – MiseryIndex

+0

입니다. 수정되었습니다. 감사. –

+0

spamhaus.org (목록에 없음)에 나열되지 않았습니다. 보낸 사람 도메인이 서버에 속합니다. 나는 그것을받지 못하는 많은 이메일 계정으로 보내려고했다. (.Mac, gmail, yahoo) 로그 파일을 살펴 보겠습니다. 메일 로그가 어디에 있는지 알 수 있습니까? 감사합니다. –

2

:

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

당신이 리눅스 박스에있는 경우, 명령 줄에서이 작업을 수행, 마일스에 따라 : 당신은 이메일을받지 못한 경우

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

, 해당 상자의 메일 시스템에 문제가 있습니다. 여러분이 물어 본 PHP 질문과는 다른 질문입니다.

+0

흠, 명령을 찾을 수 없습니다. echo "본문 텍스트" | mail -s "hello world"[email protected] -bash : mail : 명령을 찾을 수 없음 –

+0

'메일 '은 어떻습니까 –

+0

홀수 - 아무것도 반환되지 않았습니다. –

2

모든 문제 해결이 실패한 경우 - 알 수없는 이유 때문에 mail()이 false라고 가정하면 PHPMailer과 같은 메일 스크립트로 전환하여 mail()을 완전히 무시하고 SMTP를 통해 직접 연결할 수 있으며 광범위한 디버그 모드를 제공합니다 . 그렇게하면 작업 솔루션을 설정하거나 문제의 핵심을 찾을 수 있어야합니다.

+0

나는 실제로 htmlMimeMail5도 시도했다. 나는 또한 SMTP를 사용한다고 생각하지만, 같은 행운을 지니고 있었다. –

+0

클래스에 디버그 모드가 있습니까? 로그를 확인할 필요없이 SMTP 오류 메시지를 다시 받아야합니다. PHPMailer 확실히 할 수 있습니다. –

1

여기에서 라이브 웹 서버 또는 개인 개발 샌드 박스의 라인을 따라 작업하고 있습니까? (즉, 집에있는 기계?) 후자 인 경우 ISP (Cox)가 내 발신 메일 포트를 필터링하여 과거에 많은 문제가 있었다고 말할 수 있습니다. (그들은 그들이 그렇게하지 않는다고 말할 것이지만 나는 특정입니다.)

나는 이었던 일부 아웃 바운드 메시지를 받았고, 나에게 배달되기 며칠 전에 Cox 메일 스풀에 걸렸습니다.

도움이 되었기를 바랍니다.