2014-09-23 3 views
1

PHPMailer가 전자 메일을 보낼 수 없는지 알아야합니다. 가짜 주소로 보내는 경우에도 PHPMailer가 true를 반환합니다.

$phpmailer = new PHPMailer(true); 
$phpmailer->setFrom("[email protected]", "[email protected]"); 

//This is definitely not reachable 
$phpmailer->addAddress("[email protected]", "IJustPressedRandomKeys"); 

$phpmailer->Subject = "fake"; 
$phpmailer->Body = "fake"; 
echo "Is Mail: " . $phpmailer->IsMail(); 

//This prints "1" 
echo "Was Sent: " . $phpmailer->send(); 

왜이 1/사실 반환 : 그러나 심지어 가짜 이메일 주소를 반환 true에 전송?

+2

가짜 인 경우 '알 수없는 수신자'로 이메일을 반송해야합니다. PHPMailer는 메일을 발송할 때 TRUE를 리턴하면서 작업을 완료했습니다. 그것은 전자 메일이 "잘 형성되어있는 것"인 것처럼 누구에게 발송되는지에 상관하지 않습니다. –

+0

@ Fred-ii- 이메일 주소의 ** 도메인 * 이름은 가짜입니다. 따라서 PHPMailer는 유효한'helo' 또는'ehlo'를 얻지 못할 것입니다. –

+0

존은 내 생각을 읽었습니다. 그의 대답을보십시오. 손가락이 엉망이 됐어. –

답변

5

PHPMailer 이메일 주소가 진짜인지 아닌지 알 수 없습니다 (이메일이 유효 때, 나는 PHPMailer는 설정이 제대로 그래서, 이메일을받을 수행). 메일 서버는 이메일을 보내 거부 응답을받을 때까지 알 수 없습니다. 그러나 서버와 PHP 사이의 핸드 오프는 이미 그 시점까지 종료되었습니다.

전자 메일 주소를 전자 메일로 보내고 응답을 받거나 사용자가 고유 한 토큰을 웹 양식에 입력하지 않고 전자 메일 주소가 존재하는지 확인하는 실제적인 방법은 없습니다. 얻을 수있는 가장 가까운 것은 도메인이 존재하는지 확인하는 MX 레코드 또는 다른 DNS 정보를 확인하는 것입니다. 그러나 이 아니며이 아니며 도메인이 유효 할 경우 위조 된 전자 메일을 보내는 것으로 완벽 할 수 있습니다.

+0

내가 LOL이라고 말한 것처럼 당신은 내 생각을 읽음으로써 그것을 더 멀리 가져갔습니다. 나는 그걸 빨리 입력 할 수 없다;) –

+0

@JohnConde 당신이 서버와 PHP 사이에 말할 때'mail' 프로그램과 PHP 사이를 의미합니까? PHP의 메일 기능을 통해 보내는 것은 이메일 서버가 필요 없기 때문에 SMTP를 통해 전송됩니다. PHPMailer가 SMTP 명령을 보내기 위해 소켓을 열지 않았다고 확신합니까? 또는 "mail()"이 그 상태를 PHPMailer에보고하지 않는다는 것입니까? –

+1

메일 서버와 PHP. 메일 서버는 이메일 상태에 대한 즉각적인 응답을받지 못합니다. –

-1

나는 그것에 대해 잠시 생각하고 있습니다 ... 그리고 나는 좋은 해결책이 있다고 생각합니다. 어떤 종류의 큰 문제가있을 경우

:

if(!$mail->Send()) { 
    echo $mail->ErrorInfo; // this is important for you 
    // other functions... 
} 

경우 또는

성공 될 것인가? 당신이 개봉 된 자신의 메시지를 보여 exrrors의 코드를 사용을 시도 할 수

else { 
    $smtp_msg = 'ALL OK'; // sets the message you want to see 
    if ($mail->ErrorInfo != '') { // check if there wos any other error 
     $smtp_msg = $mail->ErrorInfo; // if yes - show it to me 
    } 
    // else is optional but no need couse if there wos no error we already set $smtp_msg = 'ALL OK'; 
    return $smtp_msg; 
} 

또는 더 나은 ...

또는 ... 여기처럼 잡을/시도 사용 Error handling with PHPMailer

이 될 수있다 유용한 정보!

+1

응답을 읽으십시오. PHP가 SMTP 서버의 응답을 위해 머물러 있지 않기 때문에 코드가 문제를 잡을 수 없습니다. –

+0

메일이 올바르게 전송되었는지 사용자에게 알리고 싶습니까? 이 코드는 이메일을 보내고 사용자에게 보여주고 싶은 거절 응답 마녀를 얻습니다. 좋아요, 이메일을 보내기 전에 알려주지 않을 것입니다 - 괜찮 으면, 그렇지 않으면 ...하지만 응답을 보내려고하면 도움이됩니다. – TomLi

+0

@JohnConde가 지적한 것처럼 PHPMailer가 전자 메일을받는 사람에게 보낼지 여부를 코드에 알릴 방법이 없습니다.메일 명령에 올바르게 입력했는지 알릴 수 있습니다. –

관련 문제