2016-05-17 80 views
1

我試圖運行執行下面的PHP代碼cron作業:如果我直接通過瀏覽器訪問該文件Godaddy的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('[email protected]', 'Email'); 
$mail->addReplyTo('[email protected]', '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作業運行它,它將僅執行代碼ONCE ...意味着它只會將第一行從MySQL數據庫中拉出併發送一封電子郵件,當它應該拉動多行併發送多封電子郵件時。你們能幫我嗎?謝謝。

+0

也許GoDaddy的防止從cron中發送多個電子郵件?嘗試將您在電子郵件中返回的行數看作實際返回的查詢結果。 – BillK

+1

可能是您的服務提供商阻止的大容量郵件.ask godaddy – JYoThI

+0

請使用require_once而不是require,並將其從循環中取出 –

回答

1

根據您的代碼,您一次又一次地初始化PHPMailer對象。請按照以下方式更新您的代碼。

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

$mail = new PHPMailer; 
$mail->setFrom('[email protected]', '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('[email protected]', '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(); 
} 
?> 
相關問題