2014-09-23 79 views
1

我需要知道PHPMailer是否无法发送电子邮件。但是,即使发送到伪造的电子邮件地址回报true即使发送到假地址,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 /真的吗?

(当电子邮件是有效的,我确实收到了邮件,所以PHPMailer的是设置正确)

+2

当它是假的时候,你应该收回一封电子邮件作为“未知收件人”作为反弹。发送邮件反过来返回TRUE时,PHPMailer已经完成了它的工作。只要电子邮件“看起来”是格式良好的,它并不关心它发送给谁。 – 2014-09-23 00:15:53

+0

@ Fred-ii-注意,电子邮件地址中的**域名*为假。所以PHPMailer甚至不会获得有效的'helo'或'ehlo'。 – 2014-09-23 00:16:56

+0

约翰读了我的想法。看到他的答案。我的手指开始痉挛。 – 2014-09-23 00:18:01

回答

5

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

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

+0

就像我说过的,你通过阅读我的想法进一步了解了它。我无法输入那么快;) – 2014-09-23 00:17:43

+0

@JohnConde当你说服务器和PHP之间,你的意思是'邮件程序和PHP之间?由于通过PHP的邮件功能发送不需要电子邮件服务器,它通过SMTP发送。你确定PHPMailer没有打开一个套接字来发送SMTP命令吗?或者,“mail()'不会将该状态报告给PHPMailer? – 2014-09-23 00:20:28

+1

邮件服务器和PHP邮件服务器不会立即得到有关邮件状态的响应,只能发送成功。 – 2014-09-23 00:22:51

-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

这可能是有帮助!

+1

请仔细阅读答案您的代码不会出现问题,因为PHP不会留下SMTP服务器的回复 – 2015-03-12 15:49:25

+0

您想通知用户邮件是否发送正确? 此代码允许您发送电子邮件,并得到一个拒绝回复女巫你想要显示给用户... 好吧,我同意它会在发送电子邮件之前不会告诉你 - 如果是好的或不是...但尝试发送后,答复是有帮助的 – TomLi 2015-03-13 09:52:01

+0

请阅读答案,正如@JohnConde所指出的那样,PHPMailer无法通知代码电子邮件是否已发送给收件人。它只能通知你是否正确地发送了邮件命令 – 2015-03-13 15:50:13

相关问题