Php在达到阈值后发送邮件,但只发送一次。每分钟运行服务器端cronjob

时间:2016-03-07 19:40:49

标签: php email cron

我目前正在使用PHP。我只是弄清楚如何使用PHP发送电子邮件(需要做一些后端的东西才能让它运行)。这个想法现在很简单:

1)每分钟,一个cronjob被安排执行“x.php”。这个php脚本从外部服务器获取数据。 2)如果数据的值低于15,我需要脚本向我发送电子邮件。 3)但是,如果此值暂时低于15,我不希望每分钟发送垃圾邮件,因此它应该只向我发送一次通知,然后每次超过15,然后再次低于15。

我的代码如下。我意识到这不起作用,因为$ sentMail = 1;每次运行脚本时都会执行。但我怎么能这样做?$ sentMail = 1;

if ($nettoValue < 15) {


            if ($sentMail == 1) {
                $subject = 'Dit is de titel van het test bericht';
                $email = 'Dit is de inhoud van het test bericht';
                $to = 'pbla@bla.com';
                $from = 'bla@bla.com';

                $headers   = array();
                $headers[] = "MIME-Version: 1.0";
                $headers[] = "Content-type: text/plain; charset=iso-8859-1";
                $headers[] = "From: bla <{$from}>";
                $headers[] = "Reply-To: bla <{$from}>";
                //$headers[] = "Subject: {$subject}";
                $headers[] = "X-Mailer: PHP/".phpversion();

                mail($to, $subject, $email, implode("\r\n", $headers), "-    f".$from );
                $sentMail = 0;
            }
            else {}
        }

        if ($nettoValue > 15) {
            $sentMail = 1;
        }

提前感谢您的帮助:)

编辑:显然我仍然做错了,因为一旦脚本出现在页面中,我就会收到服务器错误:

if ($nettoValue < 15) {
                $fname = "/httpdocs/sentmail.txt";
                $fhandle = fopen($fname,"r");
                $sentMail = fread($fhandle,"1");
                fclose($fhandle);

                if (strcmp($sentMail,'1')==0) {
                    $subject = 'Test';
                    $email = 'Test';
                    $to = 'bla@gmail.com';
                    $from = 'bla@gmail.com';

                    $headers   = array();
                    $headers[] = "MIME-Version: 1.0";
                    $headers[] = "Content-type: text/plain; charset=iso-8859-1";
                    $headers[] = "From: BECC <{$from}>";
                    $headers[] = "Reply-To: BECC <{$from}>";
                    //$headers[] = "Subject: {$subject}";
                    $headers[] = "X-Mailer: PHP/".phpversion();

                    mail($to, $subject, $email, implode("\r\n", $headers), "-f".$from );

                    $fname = "/httpdocs/sentmail.txt";
                    $fhandle = fopen($fname,"w");

                    fwrite($fhandle,"0");
                    fclose($fhandle);
                }
                else {}
            }

            if ($nettoValue > 15) {
                $fname = "/httpdocs/sentmail.txt";
                $fhandle = fopen($fname,"w");

                fwrite($fhandle,"1");
                fclose($fhandle);
            }

我注意到的一些事情:文件没有被写入,所以可能也没有读过。如果我删除sentMail == 1的if语句,我会立即收到一封电子邮件。我该怎么办?

1 个答案:

答案 0 :(得分:0)

弄清楚了。代码很好,但是不允许使用crontabs自动编辑其他文件。如果我手动运行脚本,它会发送电子邮件。