即使发送到虚假地址,PHPMailer也会返回true

时间:2014-09-23 00:10:04

标签: php phpmailer

我需要知道PHPMailer是否无法发送电子邮件。但即使发送到虚假的电子邮件地址也会返回true

$phpmailer = new PHPMailer( true );
$phpmailer->setFrom( "myemail@myemailladdy.com", "myemail@myemailladdy.com" );

//This is definitely not reachable
$phpmailer->addAddress( "fake@shdsabdasdiuahsdiuhaiduhasidsjdfake.com", "IJustPressedRandomKeys" ); 

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

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

为什么这会返回1 / true?

(当电子邮件有效时,我收到电子邮件,因此PHPMailer设置正确)

2 个答案:

答案 0 :(得分:5)

PHPMailer不知道电子邮件地址是否真实。邮件服务器在发送电子邮件并获得拒绝响应之前不会知道。但是服务器和PHP之间的切换已经被终止了。

没有真正的方法来验证电子邮件地址是否存在,而无需向其发送电子邮件并获得响应或让用户在Web表单中输入唯一标记。您可以获得的最接近的是验证MX记录或验证域存在的其他DNS信息等。但是将是完美的并且会产生误报以及如果域名是假的则通过虚假的电子邮件通过有效的。

答案 1 :(得分:-1)

我想了一会儿......我想我有一个很好的解决方案。

如果会有某种大麻烦:

if(!$mail->Send()) {
    echo $mail->ErrorInfo; // this is important for you
    // other functions...
}
是否会成功?

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;
}

或者甚至更好的是你可以尝试使用exrrors代码来显示你自己的消息......

或者......像这里一样使用try / catch: Error handling with PHPMailer

这可能会有所帮助!