我是PHPMailer的新手,当我设置了使用PHPMailer发送电子邮件的代码时,会显示以下错误:
邮件错误:邮件正文为空
我已经尝试了许多堆栈中的链接,例如this和this,但没有解决方案。
下面是我的代码
<?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!';
}
?>
我该如何解决?
答案 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
,因此,除非您特别想覆盖它,否则也不需要设置它。