Godaddy cron的工作只发送一封电子邮件

时间:2016-05-17 09:02:46

标签: php mysql email cron

我正在尝试运行执行以下PHP代码的cron作业:

<?php
require 'public_html/db.php';
mysql_query("SET NAMES utf8");
$aa = mysql_query("SELECT * from send where sent='0' LIMIT 20");

while($rw = mysql_fetch_array($aa)) {

$id = $rw ['id'];
$email = $rw ['email'];
$nick_sent= $rw ['nick'];
$nick_rw = $rw ['nick_pr'];

require 'public_html/mailer/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->setFrom('info@mymail.com', 'Email');
$mail->addReplyTo('info@mymail.com', 'Email');
$mail->addAddress($email);
$mail->IsHTML(true);
$mail->Subject = 'Message';

$mail->Body = 'My message';

$mail->CharSet = "utf-8";
if ($mail->send()) {

    mysql_query("UPDATE send SET sent = '1' WHERE id='$id'");}
}   
?>

如果我通过浏览器直接访问该文件,它可以完美运行。但是,如果通过cron作业运行它,它只会执行while代码ONCE ...这意味着它只会从MySQL数据库中拉出第一行并发送一封电子邮件,当它应该拉多行并发送多封电子邮件时。你们能帮助我吗?感谢。

1 个答案:

答案 0 :(得分:1)

根据您的代码,您将反复初始化PHPMailer对象。请按以下方式更新您的代码。

<?php
require 'public_html/db.php';
require 'public_html/mailer/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->setFrom('info@mymail.com', 'Email');

mysql_query("SET NAMES utf8");
$aa = mysql_query("SELECT * from send where sent='0' LIMIT 20");

while($rw = mysql_fetch_array($aa)) 
{

$id = $rw ['id'];
$email = $rw ['email'];
$nick_sent= $rw ['nick'];
$nick_rw = $rw ['nick_pr'];


$mail->addReplyTo('info@mymail.com', 'Email');
$mail->addAddress($email);
$mail->IsHTML(true);
$mail->Subject = 'Message';

$mail->Body = 'My message';

$mail->CharSet = "utf-8";
if ($mail->send()) {

    mysql_query("UPDATE send SET sent = '1' WHERE id='$id'");}
}   
$mail->clearAddresses();
}
?>