PHP cron多次发送邮件

时间:2013-09-03 10:08:23

标签: php email cron

我有一个脚本可以生成我的大数据库的报告数据 我创建了一个cron,每周在Sundat 23:00生成此报告并将其发送到许多电子邮件 如果我直接运行脚本(在浏览器中复制php脚本的链接并启动它),脚本工作得很好foreach客户端给我发了一封我想要的电子邮件。

如果cron启动脚本我只收到第一个客户端的电子邮件而不收到另一个客户端的电子邮件,我收到的邮件数量正确但不是客户端。例如:
我有5个客户名称:a,b,c,d,e。
如果我直接在浏览器中启动脚本,我收到:
一封电子邮件 一封电子邮件为b
c的一封电子邮件 d的一封电子邮件 一封电子邮件,用于e

如果cron启动我收到的脚本:
5封电子邮件发送

怎么可能?脚本是一样的! cron脚本在crontab中:

0 23    * * 0   root    wget http://127.0.0.1/reports/generate_reports_settimanale.php

另一个考虑因素是这个脚本大约需要30分钟或更长时间,因为我有大量数据和许多客户端。

PHP中的脚本非常大我削减了数据计算器的一部分。

<?php
$db = DataManager::_getConnection();
ini_set("include_path", "../inc/phpmailer/");
require("class.phpmailer.php");
ini_set("memory_limit","64M");

//-----------------------------------REPORT SETTIMANALE------------------------------------------

$qry_inv = $db->query("SELECT * FROM customer WHERE ntype > 0 AND report_settimanale='1' ORDER BY name ASC");
while( $inv = $qry_inv->fetch_array() ) {
    //check if table exists
    $qry_tb = $db->query("SHOW TABLES LIKE 'chart_voltage_".$inv['id']."_".date('Y')."'");
    if($qry_tb->num_rows > 0){
        //saving the excel sheet
        //...
        //sending the emails
        $yourName = 'CLIENT';

        $mail = new PHPMailer();

        $mail->From     = 'email@email.com';
        $mail->FromName = 'Saeg';
        $mail->AddAddress('my_email@my_em.it'); 

        $mail->AddAttachment('/var/www/reports/my_reports.xls');

        $mail->WordWrap = 50;                              // set word wrap
        $mail->IsHTML(true);                               // send as HTML

        $mail->Subject  =  'Riepilogo settimanale dal '.$week_start_title.' al '.$week_end_title;

        $mail->Body     =  "Riepilogo settimanale dell'impianto: ".utf8_decode($inv['name']);

        $mail->AltBody  =  "Riepilogo settimanale dell'impianto: ".utf8_decode($inv['name']);

        if ( $mail->Send()){
            //ok
        }
        else{
        ?>
            <script type="text/javascript">
                alert('<?php echo ("ERROR");?>');
                window.close();
            </script>
        <?php
        }
    }
}

exit;

?>

我不知道问题是否是脚本的持续时间...因为是不可能的taht如果我在浏览器中启动它工作正常并且没有cron ...是不可能的。为什么呢?

1 个答案:

答案 0 :(得分:2)

没有明显的理由说明代码与wget而不是浏览器的行为方式不同。

您的代码中没有任何工具可以记录它正在执行的操作 - 这可能会为您提供有关其失败原因的线索。至少应该确保php config记录错误,并检查相关日志中的错误。

然而,期望持续30分钟的HTTP请求成功是相当乐观的。如果你可以在机器上设置cron作业,那么直接调用脚本而不是通过web服务器和http客户端更有意义:

0 23 * * 0   root /usr/bin/php -q /var/www/html/reports/generate_reports_settimanale.php

(用你的文档根目录替换/ var / www / html。)