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()
调用,而且你也没有显示任何错误处理)。
我正在尝试使用 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()
调用,而且你也没有显示任何错误处理)。