PHPmailer重复电子邮件问题 – 使用$mail-> Send()的条件语句

我遇到了PHPmailer(版本5.1)的一个奇怪问题,我正在尝试解决这个问题.我在这里看到了很多好的反馈,所以我想我会尝试一下.我发现当我尝试使用基于$mail-> send()的条件语句创建自定义确认消息时,我收到重复的电子邮件.我可以使用phpmailer下载附带的通用testemail.php脚本复制它.这是代码:

要求’../class.phpmailer.php’;
尝试{
    $mail = new PHPMailer(true); //新实例,启用了例外
    $mail-> SMTPDebug = 1;
    $MAIL-&GT IsSMTP(); //告诉班级使用SMTP
    $mail-> SMTPAuth = true; //启用SMTP身份验证
    $mail-> Port = 25; //设置SMTP服务器端口
    $mail-> Host =“mail.domain.com”; // SMTP服务器
    $mail->用户名=“用户名”; // SMTP服务器用户名
    $mail->密码=“密码”; // SMTP服务器密码

$mail->IsSendmail();   
$mail->From       = "example_from@domain.com";  
$mail->FromName   = "First Last";  

$to = "example@domain.com";  
$mail->AddAddress($to);  

$mail->Subject  = "PHP Mailer test";  

$message = "This is a test. \n";  
$mail->Body = $message;  

$mail->Send();  
if ($mail->Send()) {  
    echo 'Message has been sent.';  
} else {  
    echo "Mailer Error: " . $mail->ErrorInfo;   
}  

} catch(phpmailerException $e){
    echo $e-> errorMessage();
}

上面的代码回应了“已发送消息”确认,但随后发送了两封电子邮件.如果我注释掉$mail-> send()行,我仍然收到“已发送消息”确认,只收到一条消息.如果我删除条件语句并将$mail-> send()行注释掉,则不会发送任何电子邮件.

为什么添加条件语句会导致发送电子邮件而不调用$mail-> send()方法?添加自定义确认消息的正确方法是什么?

解决方法:

当你在条件中放入$mail-> Send()时,你实际上是再次调用它,发送另一条消息,并检查是否发送了第二条消息.

如果你保持

if ($mail->Send()) {  
    echo 'Message has been sent.';  
} else {  
    echo "Mailer Error: " . $mail->ErrorInfo;   
}

并摆脱原来的,无条件的发送电话,你应该没事.

或者,如果它对您来说更清楚,或者您需要在其他地方进行某些处理,这取决于消息是否已成功发送,您可以执行基本相同的操作:

$status = $mail->Send();
if ($status) {  
    echo 'Message has been sent.';  
} else {  
    echo "Mailer Error: " . $mail->ErrorInfo;   
}
上一篇:退役II次后做题记录


下一篇:如何使用带有DKIM签名的Phpmailer发送电子邮件?