Getting "Mailer Error: Message body empty" when triggering with cronjob

Getting "Mailer Error: Message body empty" when triggering with cronjob

我正在尝试使用 cronjob 每周自动发送电子邮件。 但是,我收到错误消息“Mailer Error: Message body empty”。

对于电子邮件,我使用 .html 模板。

当我通过调用其 URL 来触发 .php 脚本时,它运行良好。 但是当它被 cronjob 触发时,它会给我那个消息。

我使用的主机是 hostinger,我正在使用他们的内部 cronjob 系统。

这是我的 .php 脚本。

use PHPMailer\PHPMailer\PHPMailer;
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 作业 运行 由不同的用户而不是 运行 通过您的网络服务器执行,并且该用户可能没有所有权或足够的权限来阅读 contact.html 文件。如果 msgHTML() 失败,它将 return 一个空字符串,因此您可以在尝试发送之前检查它(尽管我注意到您在问题中省略了脚本中的 send() 调用,而且你也没有显示任何错误处理)。