PHPMailer 错误"Message body empty"与 Gmail



我是PHPMailer的新手,当我设置代码以使用PHPMailer发送电子邮件时,它向我显示一个错误:

邮件

程序错误:邮件正文为空

我也尝试了堆栈中的许多链接,也像这样和这样,但无法获得解决方案。

下面是我的代码

<?php
   // Import PHPMailer classes into the global namespace
   // These must be at the top of your script, not inside a function
   use PHPMailerPHPMailerPHPMailer;
   use PHPMailerPHPMailerException;
   require 'src/Exception.php';
   require 'src/PHPMailer.php';
   require 'src/SMTP.php';
   //Create a new PHPMailer instance
   $mail = new PHPMailer;
   $mail->isSMTP();
   $mail->SMTPDebug = 2;
   $mail->Host = 'abc@test.com';
   $mail->Port = 587;
   $mail->SMTPAuth = true;
   $mail->Username = 'abc@gmail.com';
   $mail->Password = '*****';
   $mail->setFrom('xyz@gmail.com', 'test');
   $mail->addReplyTo('xyz@gmail.com', 'Test');
   $mail->addAddress('example@gmail.com', 'Receiver Name');
   $mail->Subject = 'PHPMailer SMTP message';
   $mail->msgHTML(file_get_contents('message.html'), __DIR__);
   $mail->AltBody = 'This is a plain text message body';
   /*$mail->addAttachment('test.txt');*/
   if (!$mail->send()) {
     echo 'Mailer Error: ' . $mail->ErrorInfo;
   } else {
     echo 'Message sent!';
  }
?>

我该如何解决这个问题?

msgHTML()的调用将同时设置纯正文和 HTML 正文部分。如果你对file_get_contents的调用没有返回任何结果,你最终会得到一个空的身体,这将触发你所看到的错误。

因此,请先检查该呼叫:

$body = file_get_contents('message.html');
var_dump($body);
$mail->msgHTML($body, __DIR__);

这仍然会显示错误,但您可以先检查您的内容。如果名为 message.html 的文件不为空,请使用绝对路径进行检查(例如,使用 __DIR__ . '/message.html' (,如果仍然无法生成结果,请检查访问该文件的用户是否具有足够的权限。

请注意,msgHTML 还设置了 AltBody ,因此除非您特别想要覆盖它,否则您也不需要设置它。

最新更新