使用phpmailer发送批量电子邮件

时间:2013-07-09 05:22:10

标签: php phpmailer

我正在尝试使用phpmailer发送批量电子邮件我在我的数据库中有超过10个电子邮件ID当我点击发送按钮然后第一封电子邮件将发送给一个人,第二封电子邮件将发送给同一个人加上另一个,第三个将去那两个加一个,依此类推。这是我的编码请帮帮我

<?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   = "abc@gmail.com";  // GMAIL username

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

$mail->SetFrom("abc@gmail.com", ''); // 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!";
}
}
?>

3 个答案:

答案 0 :(得分: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!";
}

答案 1 :(得分: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

这适合我。

答案 2 :(得分:0)

在您的情况下,您将在每次循环重复播放的所有BCC列表中添加新的BCC。

喜欢&#34; kworr 9月27日&13; 13,18:36&#34;说,你需要为循环中的每次发送创建新的实例。

或者你需要把

$mail->send();

离开循环。