[英]Crontab not sending php reminder email to the right person
我尝试开发一项新功能,该系统可以在用户的预订过期前一天将电子邮件发送给用户。 我写了一个php脚本,并每天早上使用crontab触发php文件的执行。 现在的问题是,如果我编译了php文件,则一切正常,并且电子邮件已发送给用户。 当我检查邮件日志时,它告诉
to=<useremail@email.com>, ctladdr=<blablala> (0/0), delay=00:04:12, xdelay=00:04:12, mailer=esmtp, pri=120371, relay=XXXXXXX., stat=Sent (r3HMoisd031604 Message accepted for delivery)
但是,如果我使用crontab执行相同的php文件,则邮件将发送到服务器的根目录,而不是我在php文件中写的“ useremail@email.com”。
to=<root@myserver.com>, ctladdr=<blablabla> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30958, dsn=2.0.0, stat=Sent
可能是什么问题? 为什么php文件不能按crontab的预期工作? 有人可以帮忙吗?
我的php文件-“ demo.php”
require_once "defaultincludes.inc";
global $tbl_entry, $tbl_users;
$current = mktime(date("H"),date("i"),0,date("m"),date("d"),date("Y"));
$start = $current + 12*3600;
$end = $current + 40*3600;
$query="SELECT U.email, U.fullname, E.name FROM $tbl_entry E, $tbl_users U "
." WHERE U.name = E.create_by "
." AND E.end_time >= $start "
." AND E.end_time <= $end ";
$result= sql_query($query);
$mail_list=array();
for ($i=0; ($row=sql_row_keyed($result,$i));$i++)
{
$temp=array();
$temp[]=$row['fullname'];
$temp[]=$row['email'];
$temp[]=$row['name'];
$mail_list[]=$temp;
}
for ($i=0; $i<count($mail_list); $i++) {
$to = $mail_list[$i][1];
$subject= "Reminder of ".$mail_list[$i][2];
$body = "Hi ".$mail_list[$i][0].",\n"
." Your reservation ".$mail_list[$i][2]." will expire in one day";
mail($to,$subject,$body);
}
crontab文件-“ reminder.txt”
30 7 * * * /var/www/html/qars-vm90/demo.php
没有足够的信息来回答您的问题。 php脚本从哪里获取电子邮件地址? 它从正常运行的用户是什么,以及从cron运行的用户是什么?
/var/www/html/qars-vm90/demo.php
仅当脚本被标记为可执行文件时才有效。 另外,您需要在文件顶部添加一个Shebang来告诉Shell如何处理文件(应该使用perl,php,python等来执行该文件)
我怀疑发送的电子邮件是来自cron的错误消息,提示该文件不可执行。 如果您以root身份登录,则应该能够阅读该消息。
最简单的更改可能是将您的crontab更改为
30 7 * * * php /var/www/html/qars-vm90/demo.php
还值得记住的是,cron的环境通常与您在命令行(登录shell等)所获得的环境略有不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.