2012-05-11 6 views
2

У меня проблема. Когда я нажимаю кнопку отправки, только [email protected] получает сообщение.Как отправить несколько писем в PHP и MySQL через phpmailer

Как его изменить? Я использую отправку Gmail SMTP.

Есть 2 записей в базе данных:

Вот мой код:

include "phpmailer/class.phpmailer.php"; 
$host = "localhost"; 
$user = "root"; 
$pass = "root"; 
$db = "mailTest"; 

mysql_connect($host, $user, $pass); 
mysql_select_db($db); 

$query = "SELECT email FROM list"; 

$recordset = mysql_query($query); 
$row_recordset = mysql_fetch_assoc($recordset); 
$tota_row_recordset = mysql_num_rows($recordset); 
$msg = strip_tags($_POST['msg']); 
$mail= new PHPMailer(); //建立新物件 
while($row = mysql_fetch_array($recordset)) 
{ 
    $to = $row['email']; 
    $mail->AddAddress($to, "Test Message"); 
}  
$mail->IsSMTP();  
$mail->SMTPAuth = true; 
$mail->SMTPSecure = "ssl"; 
$mail->Host = "smtp.gmail.com";  
$mail->Port = 465;  
$mail->CharSet = "big5"; 
$mail->Subject = "Test Message";  
$mail->Username = "xxxxxx";  
$mail->Password = "xxxxxx"; 
$mail->Body = "$msg"; 
$mail->IsHTML(true);   
if(!$mail->Send()) {  
echo "Mailer Error: " . $mail->ErrorInfo;  
} else {  
header('Location: index.php'); 
} 

ответ

3

С помощью этого цикла вы перезаписать получателя с каждой итерации, поэтому только последний остается, чтобы получить электронное письмо:

while($row = mysql_fetch_array($recordset)) 
{ 
    $to = $row['email']; 
} 
$mail = new PHPMailer(); 

Изменить код

$mail = new PHPMailer(); // create object FIRST 
while($row = mysql_fetch_array($recordset)) 
{ 
    $to = $row['email']; 
    $mail->AddAddress($to, "Test Message"); // add each DB entry to list of recipients 
} 
+0

когда я положил $ mail-> AddAddress ($ to, "Test Message"); на веб-странице появится ошибка. – tommychoo

+0

какая ошибка показывает? –

+0

@tommychoo изменил пример, чтобы исправить это, попробуйте еще раз – Kaii

2

попробовать это ниже:

while($row = mysql_fetch_array($recordset)) 
{ 
    $to = $row['email']; 
    $mail= new PHPMailer(); 
    $mail->IsSMTP(); 

    $mail->SMTPAuth = true; 

    $mail->SMTPSecure = "ssl"; 

    $mail->Host = "smtp.gmail.com"; 

    $mail->Port = 465; 

    $mail->CharSet = "big5"; 

    $mail->Subject = "Test Message"; 

    $mail->Username = "xxxxxx"; 

    $mail->Password = "xxxxxx"; 

    $mail->Body = "$msg"; 

    $mail->IsHTML(true); 

    $mail->AddAddress($to, "Test Message"); 

    if(!$mail->Send()) { 

    echo "Mailer Error: " . $mail->ErrorInfo; 
    } 
}  
+1

не должен быть действительно инстанцирование нового PHPMailer на каждом цикле! – dmp

+0

Я пробую ваш код, но проблема все еще существует. – tommychoo

0
if(isset($_POST['sbmit'])) 
{ 
    for($i=0;$i<count($_POST['email_address']);$i++) 
    { 

      $to = $_POST['email_address'][$i]; 
      echo $to."<br />"; 
      $subject = 'Thank you for Subscribing'; 
      $message = $_POST['news']; 
      $headers = 'From: [email protected]' . "\r\n" . 
      'Reply-To: [email protected]' . "\r\n" . 
      'X-Mailer: PHP/' . phpversion(); 


     echo $_POST['email_address'][$i]."<br />"; 
     ini_set("SMTP","smtp.ntc.net.np"); 
     ini_set('sendmail_from', '[email protected]'); 
     if(mail($to,$subject,$message,$headers)) 
     { 
       echo "Mail has been sent to admin<br />"; 
     } 
     else 
     { 
       echo "Mail could not been sent"; 
     } 

    } 
} 


?> 
Смежные вопросы