我正在尝试使用cronjob每周自动发送电子邮件。然而,我收到错误消息";Mailer错误:邮件正文为空;。
对于电子邮件,我使用.html模板。
当我通过调用php脚本的URL来触发它时,它可以完美地工作。但当它被cronjob触发时,它会给我这个信息。
我使用的主机是hostinger,我使用的是他们的内部cronjob系统。
这是我的.php脚本。
use PHPMailerPHPMailerPHPMailer;
require 'vendor/autoload.php';
$msg = file_get_contents('./contact.html');
$msg = str_replace('$message', $message, $msg);
$mail = new PHPMailer;
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'myusername';
$mail->Password = 'mypassword';
$mail->setFrom('frommail@mail.com', 'frommail');
$mail->addReplyTo('mail@mail.com', 'mail');
$mail->addAddress($username I get from the database, $username I get from the database);
$mail->Subject = 'subject';
$mail->MsgHTML($msg);
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
$response = ["Result" => "error"];
echo json_encode($response);
} else {
$response = ["Result" => "success"];
echo json_encode($response);
}
您的cron作业很可能由与通过web服务器运行时不同的用户运行,并且该用户可能没有读取contact.html
文件的所有权或足够的权限。如果msgHTML()
失败,它将返回一个空字符串,因此您可以在尝试发送之前进行检查(尽管我注意到您在问题中的脚本中省略了send()
调用,并且也没有显示任何错误处理(。