【问题标题】:Crontab not sending php reminder email to the right personCrontab 未向正确的人发送 php 提醒电子邮件
【发布时间】:2013-04-18 14:33:32
【问题描述】:

我尝试开发一项新功能,系统可以在用户预订到期前一天向用户发送电子邮件。 我写了一个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

这可能是什么问题?为什么 crontab 中的 php 文件不能按预期工作?有人可以帮忙吗?

我的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

【问题讨论】:

  • 你不需要 2 个循环,标准的 while() 会容易得多

标签: php email cron


【解决方案1】:
/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 等)所获得的环境略有不同

【讨论】:

  • 哈哈,是的,我昨天也发现了问题,是因为我错过了文件名前面的“php”命令。感谢您的帮助。
【解决方案2】:

没有足够的信息来回答您的问题。 php 脚本从哪里获取电子邮件地址?它以什么用户正常运行,它从 cron 以什么用户运行?

【讨论】:

  • 是的,这对我来说没有意义。确认您没有将 root@myserver.com 作为电子邮件地址的用户?
猜你喜欢
  • 2018-12-09
  • 2021-12-09
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多