2017-08-17 2 views
0

D'abord, désolé pour mon anglais :) J'ai un problème avec phpmailer. Je veux envoyer des emails à plusieurs personnes avec un attachement dédié à eux (pdf). L'adresse email doit être téléchargée depuis MySQL. Mais je ne sais pas comment je peux le faire. Le fichier PDF a le même nom que la colonne "nom" dans la table base de données. Par exemple j'ai:PHPMailer - envoi d'emails avec pièces jointes à plus d'une personne et adresse e-mail téléchargée à partir de MySql

c'est un exemple, J'ai beaucoup d'utilisateurs avec beaucoup de fichiers PDF.

Simplifier ce que je veux: l'utilisateur XXX doit recevoir un e-mail avec XXX.pdf mais l'utilisateur YYY doit recevoir un e-mail avec YYY.pdf.

Je ne sais pas si vous comprenez ce que je veux dire :)

En ce moment j'ai quelque chose comme ça et je ne sais pas comment attribuer un nom au courrier électronique (dynamiquement?) Dans la requête

$stmt = $dbh->prepare('SELECT id, name, email FROM users WHERE name ="SomeUserName" '); 
// how to assign name to email?? 
$stmt->execute(); 


$mail    = new PHPMailer(); // defaults to using php "mail()" 

$mail->CharSet = 'UTF-8'; 

$body    = 'SOME TEXT IN BODY'; 



$mail->AddReplyTo("[email protected]","First Last"); 

$mail->SetFrom('[email protected]', '[email protected]'); 



while($row=$stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
    $mail->addAttachment("pdf/07.2017/".str_replace('.','_',$row['name']).".pdf"); 
         $address = $row["email"]; 
        } 


$mail->AddAddress($address, "SOME TEXT"); 

$mail->Subject = "SOME SUBJECT"; 

$mail->MsgHTML($body); 

if(!$mail->Send()) { 
    echo 'send'; 
} else { 
    echo 'didnt send'; 
} 
+0

Regardez l'exemple de liste de diffusion fourni avec PHPMailer. – Synchro

Répondre

1

Vous devez configurer toutes les informations générales avant la boucle while.

Puis dans votre boucle while vous devez:

  1. le fichier joint
  2. Définissez l'adresse pour le récepteur
  3. Envoyer l'e-mail
  4. Clear the attachment
  5. Clear the address for the receiver

A pour affecter le variable à votre requête MySQL

$stmt = $dbh->prepare('SELECT id, name, email FROM users WHERE name =:name'); 
$stmt->bindParam(":name", "somename"); 

Il est évident que "somename" peut aussi être une variable comme $_POST['somename'].