2011-02-06 2 views
9

PHP의 mail() 내장 함수를 사용하여 매우 간단한 등록 PHP 스크립트를 작성하여 사용자에게 활성화 링크를 전자 메일로 보냅니다.PHP 메일() 오류를 잡아 당겨 합당한 사용자 오류 메시지 표시

문제는 전자 메일 형식과 같은 일반적인 오류를 잡을 수 있지만 일단 서버에 불이 들어 오면 사용자가 실패한 전자 메일 주소를 입력했다고 말하면서이 오류를 catch하는 방법을 알지 못합니다. 무슨 일이 일어 났는지 사용자에게 알려줍니다.

순간 예를 들어 나는이 얻을 :

Warning: mail() [function.mail]: SMTP server response: 554 : Recipient address rejected: Relay access denied in ** on line 70

이 같은 오류에 대해 무엇을 할 수 있는지 어떤 아이디어? 나는 @ 기호를 사용하여 오류를 표시하는 것을 알고 있지만 그보다 더 많은 일을하고 문제를 처리하려고합니다.

답변

21

오류 검출하는 부울 결과를 사용

$success = @mail(...); 

는 그런 다음 내부 오류가 문제를 일으킨 발견 할을하므로 사용이 PHP 5.2와 함께 작동

$error = error_get_last(); 
preg_match("/\d+/", $error["message"], $error); 
switch ($error[0]) { 
    case 554: 
     ... 
    default: 
     ... 

주 앞으로 만.

PHP로 전송 오류를 확인하거나 전송 오류 메일을 볼 방법이 없습니다. 이를 위해 pop3 폴링 처리기가 필요합니다.

+2

실제 답변을 게시 해 주셔서 감사합니다. :) –

0

당신은 당신이 당신이 메일을 보내 정말 당신이 그것을 당신은 확인 filter_var을 사용할 수 있습니다

것으로 기대되어 있는지 확인하기 위해 입력을 소독하기 전에 할 수있는만큼을 잡으려고 원하는 이메일 주소 정말 정수는 허용 된 범위 내에 주소, 검사 등이다

당신이 실패 배달을 확인할 수있는 곳으로 주소에서 메일 헤더를 설정합니다

$headers = 'From: [email protected]' . "\r\n"; 

당신이 할 수있는 루게릭 병 O 예상대로 수행하여 메일 확인 : 실제 환경에서 당신은 아마 display warnings 싶지 않아,

if(mail($to,$subject,$message)) 

그리고 마지막 일을, 당신은 어느 INI 파일을 통해 또는 ini_set을 사용하여 사람들을 해제 할 수 있습니다.

+0

사실 일이 아니라 질문에 대한 답변을. 당신이 할 수없는 smtp 오류를 일으킬 수있는 것들도 있습니다. 예를 들어 스팸 차단 목록. –

-2

쉽게 처리 할 수있는 예외를 throw하는 Swift Mailer와 같은 라이브러리를 사용하는 것이 가장 좋습니다.

+4

이것은 문제의 치료법이지만 직접 해결하는 방법은 아닙니다. 거의 모든 것을 위해 사용할 수있는 라이브러리가 있으며, 물론 많은 작업을 안전하게 할 수 있습니다. 그러나 사람들이 자신들이 일하는 프로그래밍 언어의 기본을 더 이상 알지 못하기 때문에 사람들이 스스로 기본적인 문제를 풀 수있는 능력을 잃어 버리는 것을 보는 것에 대한 애련이 있습니다. –

+0

사실,이 질문에 대한 답이 아니라 태클 방법을 제시합니다 문제는 더 실용적으로. – Jan

관련 문제