PHPMailer不提供ErrorInfo

时间:2014-11-14 09:21:42

标签: error-handling sendmail phpmailer

我遇到PHP Mailer的问题,当发生错误时,它没有提供$ mail-> ErrorInfo。 我使用[http://phpmailer.worxware.com/?pg=tutorial#1]中的原始示例进行了测试,如下所示。

<?php

require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();  // telling the class to use SMTP
$mail->Host     = "smtp.example.com"; // SMTP server

$mail->From     = "from@example.com";

$mail->Subject  = "First PHPMailer Message";
$mail->Body     = "Hi! \n\n This is my first e-mail sent through PHPMailer.";
$mail->WordWrap = 50;

if(!$mail->Send()) {
   echo 'Message was not sent.';
   echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  echo 'Message has been sent.';
}
?>

我已将主机设置为我的服务器,已修改&#34;来自&#34;和&#34; AddAddress&#34;纠正地址,我按预期收到了测试邮件。但是,当我将收件人地址更改为blxxxa@blablaxxxx.de时,只是为了检查错误的处理方式,我不会收到错误。

$mail->AddAddress("blxxxa@blablaxxxx.de");

我仍然收到&#34;邮件已发送&#34;。任何的想法?也许服务器设置?

4 个答案:

答案 0 :(得分:2)

除非发生错误,否则

ErrorInfo将不会包含错误消息。听起来你的邮件服务器正在接受邮件而没有抱怨(如果它是一个中继或本地主机就会出现这种情况),所以你需要检查你的邮件服务器日志和你的退回邮箱,因为问题是你的上游,因此不是对PHPMailer可见。

简而言之,你没有做错任何事,你只是在错误的地方寻找。

答案 1 :(得分:0)

尝试将$ mail-&gt; Send()放入try-catch块。

 try{
      // ... Your Setup ...
      $mail->Send();
 } 
 catch (phpmailerException $e) {
    echo $e->errorMessage();  //PHPMailer error messages
 } 
 catch (Exception $e) {
      echo $e->getMessage();  // other error messages
 }

如果你看一下phpmailer库的代码(phpmailer library on github搜索公共函数send()代码块)  你会发现phpmailer会在出现故障时抛出异常。

您在此处有一些好的示例:http://www.merocode.com/sending-emails-using-phpmailer-via-smtp/

祝你好运。

答案 2 :(得分:0)

提供profer主机名,用户名和密码。例如,

<?php

require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();  // telling the class to use SMTP
$mail->Host     = "mail.example.com"; // SMTP server
$mail->Port       = 25; // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";

$mail->From     = "from@example.com";

$mail->Subject  = "First PHPMailer Message";
$mail->Body     = "Hi! \n\n This is my first e-mail sent through PHPMailer.";
$mail->WordWrap = 50;

if(!$mail->Send()) {
   echo 'Message was not sent.';
   echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  echo 'Message has been sent.';
}
?>

答案 3 :(得分:0)

我的情况是PhpMailer在mail.xxx.com' did not match expected CN=发出警告

  

警告:stream_socket_enable_crypto():对等证书CN = @$mail->send(); mail.yyy.com'

     

在368行的class.smtp.php中

因此,恕我直言PhpMailer错过了一些异常处理。 在这种情况下,您可能会遇到以下情况:

  • 在票务系统https://github.com/PHPMailer/PHPMailer/issues中创建一个问题,并希望进行更新
  • 在函数调用quotechar="'"中添加“ @”-隐藏警告,但对您没有进一步的帮助
  • 使用PHP缓冲区读取警告。

更新:

在PHPMailer 6.x中,警告已删除-但$ mail-> ErrorInfo不包含任何有用的信息。我得到的只是“ SMTP connect()failed”。并不是真正的进步...