Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获得;邮件程序错误:邮件正文为空;使用cronjob触发时_Php_Email_Cron_Phpmailer - Fatal编程技术网

Php 获得;邮件程序错误:邮件正文为空;使用cronjob触发时

Php 获得;邮件程序错误:邮件正文为空;使用cronjob触发时,php,email,cron,phpmailer,Php,Email,Cron,Phpmailer,我试着每周用cronjob自动发送电子邮件。 但是,我得到了错误消息“Mailer error:messagebody empty” 对于电子邮件,我使用.html模板 当我通过调用.php脚本的URL来触发它时,它工作得非常好。 但是当它被cronjob触发时,它给了我这个信息 我使用的主机是hostinger,我使用的是他们的内部cronjob系统 这是我的.php脚本 use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.p

我试着每周用cronjob自动发送电子邮件。 但是,我得到了错误消息“Mailer error:messagebody empty”

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

当我通过调用.php脚本的URL来触发它时,它工作得非常好。 但是当它被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作业是由不同的用户运行的,而不是通过web服务器运行的,并且该用户可能没有所有权或足够的权限来读取
contact.html
文件。如果
msgHTML()
失败,它将返回一个空字符串,因此您可以在尝试发送之前检查它(尽管我注意到您在问题中忽略了脚本中的
send()
调用,并且您也没有显示任何错误处理).

这篇文章是否解决了您的问题,该问题是针对您的phpmailer根本无法工作的情况。我的phpmailer在直接调用URL时工作。但是当由cronjob触发时会出现错误。您是否可以检查,当您使用cron时,它会在$msg变量中获取contact.html内容,我认为它没有获取内容可能存在文件权限或路径问题,所以在设置cron之前,只需回显您的msg veriable并验证其获取文件内容。@NielsHensen如果您使用的是linux或ubutu服务器,那么您的文件组(或所有者)是什么就成了问题它的ec2或ubutu用户或root以及您的cron都是使用root用户或oher用户执行的。我联系了我的主机,他们进行了检查。权限设置正确,请不要相信。检查。从
msgHTML()
检查返回值时发生了什么?你的错误日志怎么说?