2013-07-09 86 views
2

我想使用phpmailer發送批量電子郵件我有超過10個電子郵件ID在我的數據庫中,當我點擊發送按鈕,然後第一封電子郵件將去一個人,第二封電子郵件將去對同一個人加上另一個人,第三個人會去那兩個再加上一個,等等。這是我的編碼,請幫我使用phpmailer發送批量電子郵件

<?php 

$body=$_POST['message']; 
$subject=$_POST['sub']; 

//error_reporting(E_ALL); 
error_reporting(E_STRICT); 

date_default_timezone_set('America/Toronto'); 

require_once("class.phpmailer.php"); 
//include("class.smtp.php"); 


$mail    = new PHPMailer(); 

$mail->IsSMTP(); // telling the class to use SMTP 

$mail->Host  = "stmp.gmail.com"; // SMTP server 

$mail->SMTPDebug = 1;      // enables SMTP debug information 

// 1 = errors and messages 

// 2 = messages only 

$mail->SMTPAuth = true;     // enable SMTP authentication 

$mail->SMTPSecure = 'ssl'; 

$mail->Host  = "smtp.gmail.com";  // sets GMAIL as the SMTP server 

$mail->Port  = 465;     // set the SMTP port for the GMAIL server 

$mail->CharSet = "big5"; 

$mail->Username = "[email protected]"; // GMAIL username 

$mail->Password = "**********";   // GMAIL password 

$mail->SetFrom("[email protected]", ''); // set reply id 

$mail->Subject = ($subject); // subject 

$mail->MsgHTML("$body"); // message 

$mail->AddAddress($address, "abc"); 


$con=mysql_connect("localhost","root","") or 
die("could not connect:".mysql_error()); 

mysql_select_db("bulkemail"); 
$qry=mysql_query("SELECT * FROM email_id", $con); 
if(!$qry) 
{ 
die("Query Failed: ". mysql_error()); 
} 


while($row = mysql_fetch_array($qry)) 

{ 

$id= $row["email"]; 

$address = ($id); 

$mail->AddBcc($id); 

$mail->send(); 

if(!$mail->Send()) { 
echo "Mailer Error: " . $mail->ErrorInfo; 
} 
else { 
echo "Message sent!"; 
} 
} 
?> 
+0

你確定你在數據庫中有不同的郵件嗎? –

+0

是的,我確定我在我的數據庫中有不同的電子郵件 –

+0

實際上,這是一個正確的行爲,一個類實例旨在發送一條消息,並且您需要爲每條新消息創建一個新類。 – kworr

回答

4

刪除$mail->send();和移動if(!$mail->Send())while($row ..)循環外

while($row = mysql_fetch_array($qry)){ 
    $id= $row["email"]; 
    $address = ($id); 
    $mail->AddBcc($id);  
} // end the while loop 

// remove $mail->send(); as it is a duplicate of if(!$mail->Send()) 

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

我已經完成了,但如果發送多次,仍然收到相同的問題 –

+0

,那麼'$ mail-> send()'仍然在一個循環內,或者您的數據庫中有重複的電子郵件地址。一旦將'$ mail-> send()'放在腳本的末尾,就像上面那樣,它應該只發送一次給所有的密件抄送收件人。 – Sean

+0

劃痕。通過使用'$ mail-> send();'和'if(!$ mail-> Send())''你很可能會發送兩次。刪除'$ mail-> send();' – Sean

2

我用PHPMailer的大規模郵件和我有同樣的問題。

while($row = mysql_fetch_array($qry)){ 
    $id= $row["email"]; 
    $address = ($id); 
    $mail->AddBcc($id); 

//imo if should be in the while loop. 

    if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
    } 
    else { 
     echo "Message sent!"; 
//I added this function down there so that old address would be removed but in the new loop, new one will be added. 
     $mail-> ClearAddresses(); 
    } 
} // end the while loop 

這適用於我。

+0

在phpmailer網站上有一個很好的例子:http:// phpmailer。 worxware.com/index.php?pg=exampledb – kworr

0

就你的情況而言,你正在向循環的每個重複中已發送的所有BCC列表中添加一個新的BCC。

像「kworr 13年9月27日在18:36」說,你需要爲循環中的每個發送創建新的實例。

或者你需要把

$mail->send(); 

圈外。