Gmail的PHPMailer错误“邮件正文为空”

时间:2019-06-10 04:52:13

标签: php phpmailer

我是PHPMailer的新手,当我设置了使用PHPMailer发送电子邮件的代码时,会显示以下错误:

  

邮件错误:邮件正文为空

我已经尝试了许多堆栈中的链接,例如thisthis,但没有解决方案。

下面是我的代码

<?php
   // Import PHPMailer classes into the global namespace
   // These must be at the top of your script, not inside a function
   use PHPMailer\PHPMailer\PHPMailer;
   use PHPMailer\PHPMailer\Exception;

   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!';
  }
?>

我该如何解决?

1 个答案:

答案 0 :(得分:1)

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,因此,除非您特别想覆盖它,否则也不需要设置它。