【问题标题】:Cron job doesn't send mailCron 作业不发送邮件
【发布时间】:2015-06-24 07:00:01
【问题描述】:

我的 cron 作业正在运行,但没有发送电子邮件。

/usr/bin/php -f /home/user/public_html/test/cron/checklist.php task=client

结果 = 正常

<?php
//get parameter from URL 
$argv = $_SERVER['argv'];
$task = explode("=", $argv[1]);
?>

结果 = 正常

并发症从这里开始!

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo.'<br>';
} else {
    echo "Message sent!<br>";
} 

上面写着“消息已发送!”但没有发送电子邮件! 当我从网页运行它作为测试时,它可以工作并发送邮件

我使用phpmailer发送。

【问题讨论】:

  • 检查您的邮件服务器日志。
  • mail 命令将正常执行(通常),但是如果不使用 SMTP 邮件,您发送的邮件可能会被 ISP 阻止或垃圾邮件过滤。收件人是否检查了他们的垃圾邮件文件夹? email.about.com/od/emailprogrammingtips/qt/…
  • 感谢您的回答...我检查了,写入日志没有问题
  • @Brolosse 您可能还想检查包含的任何 PHP 文件(通过 includerequire)在 crontab 执行期间可能没有正确加载。当 cron 运行时,可能会尝试跟踪 apache 日志以查找任何 php 错误。最后,task=client 您可能希望查看接受的答案,如stackoverflow.com/questions/7858114/…中所述

标签: php cron phpmailer


【解决方案1】:

试试/usr/bin/php -f /home/user/public_html/test/cron/checklist.php client

另外,在您的 PHP 代码中,区分 Web 服务器处理和命令行处理。这是一个例子:

if (php_sapi_name() == 'cli') {
    echo "this is command line";
    $task = $argv[1];
} else {
    echo "run from a web server";
    $argv = $_SERVER['argv']; 
    $task = explode("=", $argv[1]);
}
echo "\n task =";
echo $task;

【讨论】:

  • 当然一定要检查 argv 是否有必要的元素数量,如果你还没有这样做,请使用 isset 以及 try and catch。
猜你喜欢
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多