2011-03-08 2 views
0

J'essaye d'écrire PHPMailer pour envoyer un email. J'utilise une boucle while avec mysqli_fetch_array pour extraire les enregistrements de courrier électronique de MySQL et j'ai assigné le champ de base de données 'email' à une variable appelée '$ to' et j'envoie au maileur PHPMailer $ - AddAddress ("[email protected]") appel.

Le script fonctionne mais envoie uniquement un courrier électronique au premier destinataire trouvé dans la base de données. Des indices sur où je suis en train de baiser? THX!

$from = '[email protected]'; 
    $from_name = 'My Name'; 
    $subject = $_POST['subject']; 
    $text = $_POST['elvismail']; 

$dbc = mysqli_connect('localhost', 'username', 'the_password', 'database_name') 
    or die('Error connecting to mysql'); 

$query = "SELECT * FROM email_list"; 
$result = mysqli_query($dbc, $query) 
    or die('Error querying database.'); 

    while ($row = mysqli_fetch_array($result)){ 
     $to = $row['email']; 
     $first_name = $row['first_name']; 
     $last_name = $row['last_name']; 
     $msg = "Dear $first_name $last_name,\n$text"; 
    } 


    require("PHPMailer_v5.1 2/class.phpmailer.php"); 
    $mailer = new PHPMailer(); 
    $mailer->IsSMTP(); 
    $mailer->Host = 'ssl://smtp.gmail.com:465'; 
    $mailer->SMTPAuth = TRUE; 
    $mailer->Username = '[email protected]'; // Sender's gmail address 
    $mailer->Password = 'the_password'; // Sender's gmail password 
    $mailer->From = "$from"; // Sender's email address 
    $mailer->FromName = "$from_name"; // senders name 
    $mailer->Body = "$msg"; 
    $mailer->Subject = "$subject"; 
    $mailer->AddAddress("$to"); // Recipient 
     if(!$mailer->Send()) 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
     echo "Mailer Error: " . $mailer->ErrorInfo; 
    } 
    else 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
    } 


    mysqli_close($dbc); 
+0

Cela a été répondu ici avant. Jetez un oeil à http://stackoverflow.com/questions/1770765/phpmailer-addaddress –

Répondre

1

Vous fermez la boucle while trop tôt.

Modifier à:

require("PHPMailer_v5.1 2/class.phpmailer.php"); 
while ($row = mysqli_fetch_array($result)){ 
    $to = $row['email']; 
    $first_name = $row['first_name']; 
    $last_name = $row['last_name']; 
    $msg = "Dear $first_name $last_name,\n$text"; 

    $mailer = new PHPMailer(); 
    $mailer->IsSMTP(); 
    $mailer->Host = 'ssl://smtp.gmail.com:465'; 
    $mailer->SMTPAuth = TRUE; 
    $mailer->Username = '[email protected]'; // Sender's gmail address 
    $mailer->Password = 'the_password'; // Sender's gmail password 
    $mailer->From = "$from"; // Sender's email address 
    $mailer->FromName = "$from_name"; // senders name 
    $mailer->Body = "$msg"; 
    $mailer->Subject = "$subject"; 
    $mailer->AddAddress("$to"); // Recipient 
    if(!$mailer->Send()) 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
     echo "Mailer Error: " . $mailer->ErrorInfo; 
    } 
    else 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
    } 


// Then close your while loop here 
} 

mysqli_close($dbc); 
+0

merci! Je l'ai fait fonctionner. – ven

+0

De rien. N'oubliez pas d'upvote et d'accepter les réponses. C'est comment montrer l'appréciation sur le débordement de pile! – webbiedave

0

A la fin de la boucle, $to (et les autres variables) sera mis à la dernière itération de la boucle.

Ajustez votre code pour initialiser PHPMailer au-dessus de la boucle, puis appelez $mailer->AddAddress($to) dans votre boucle.

Ne pas oublier d'appeler $mailer->Send() après votre boucle terminée :)

+0

merci pour votre aide alex! – ven

Questions connexes