为什么PHP邮件在发送后将mimeheader打印到屏幕上


Why is PHP mailer printing mimeheader to screen after send?

这就是问题所在,我刚刚实现了PHPMailer,并且在发送电子邮件后将Mime Header打印到屏幕上。 我正在使用GITHUB上列出的最新PHPMailer代码,我几乎经历了所有内容,但找不到任何原因将其打印到屏幕上。 如果您需要更多信息,请告诉我。 我似乎想不出别的了。 见下文:

2013-09-30 20:37:14 CLIENT -> SERVER: AUTH LOGIN
2013-09-30 20:37:14 CLIENT -> SERVER: ZGFwaWVjaG9jxXlAZ21haWwuY29t
2013-09-30 20:37:14 CLIENT -> SERVER: ZHBpZT5HNzE=
2013-09-30 20:37:15 CLIENT -> SERVER: MAIL FROM:<xxxxx@xxxxxx.com>
2013-09-30 20:37:15 CLIENT -> SERVER: RCPT TO:<yyyyy@yyyyyyy.com>
2013-09-30 20:37:15 CLIENT -> SERVER: DATA
2013-09-30 20:37:15 CLIENT -> SERVER: Date: Mon, 30 Sep 2013 16:37:14 -0400
2013-09-30 20:37:15 CLIENT -> SERVER: Return-Path: <xxxxx@xxxxxxx.com>
2013-09-30 20:37:15 CLIENT -> SERVER: To: Someone <yyyyyy@yyyyyyyy.com>
2013-09-30 20:37:15 CLIENT -> SERVER: From: xxxxxxx xxxxx <xxxxx@xxxxxxx.com>
2013-09-30 20:37:15 CLIENT -> SERVER: Subject: xxxxxxx.com Confirmation
2013-09-30 20:37:15 CLIENT -> SERVER: Message-ID: <c22a17772edd75gh89td324ac0fe67ae@localhost>
2013-09-30 20:37:15 CLIENT -> SERVER: X-Priority: 3
2013-09-30 20:37:15 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.7 (https://github.com/PHPMailer/PHPMailer/)
2013-09-30 20:37:15 CLIENT -> SERVER: MIME-Version: 1.0
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Type: multipart/alternative;
2013-09-30 20:37:15 CLIENT -> SERVER:   boundary="b1_c22a17772edd75gh89td324ac0fe67ae"
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: --b1_c22a17772edd75gh89td324ac0fe67ae
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Type: text/plain; charset=iso-8859-1
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: This is the text body of the message, it is 
2013-09-30 20:37:15 CLIENT -> SERVER: printed here.  blah blah blah
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: --b1_c22a17772edd75gh89td324ac0fe67ae
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1
2013-09-30 20:37:15 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: This is the alternate text body for non-html email that may or may no be reading this.
2013-09-30 20:37:15 CLIENT -> SERVER: This is also the text body
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: --b1_c22a17772edd79e8f6fd324ac0fe67ae--
2013-09-30 20:37:15 CLIENT -> SERVER:
2013-09-30 20:37:15 CLIENT -> SERVER: .
2013-09-30 20:37:16 CLIENT -> SERVER: QUIT

以下是实现代码:

require("class.phpmailer.php");
$mail = new PHPMailer;
$mail->From = 'xxxxx@xxxxxxx.com';
$mail->FromName = 'xxxxxxx xxxxx';
$mail->addAddress($email, $fname);                  
$mail->addReplyTo('', '');
$mail->IsSMTP();                            
$mail->SMTPDebug = 1;                       
$mail->SMTPAuth = true;                         
$mail->SMTPSecure = 'ssl';                      
$mail->Host = "smtpout.secureserver.net ";
$mail->Port = 465;                          
$mail->Username = "xxxxx@xxxxxxx.com";
$mail->Password = "password";
$mail->WordWrap = 50;                                       
$mail->isHTML(true);                                        
$mail->Subject = 'xxxxxxx.com Confirmation';
$mail->Body    = "This is the text body of the message, it is printed here.  blah blah blah";
$mail->AltBody = "This is the alternate text body for non-html email that may or may no be reading this.<br />This is also the text body";
if(!$mail->send()) {
   echo 'Message could not be sent.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

你需要设置

$mail->SMTPDebug = false;  

就我个人而言,我希望SMTPDebug写到error_log而不是回声到屏幕上。

将此添加到 PHPMailer 配置以启用此行为:

$mail->Debugoutput = 'error_log';

值得庆幸的是,这是受支持的,只是不是默认设置。