[RESOLU] Email groupé PHPMailer / MySQL

Eléphanteau du PHP | 39 Messages

22 mai 2013, 09:15

Bonjour à tous,

J'aimerais envoyer envoyer un email à plusieurs utilisateurs en fonction d'une requete donnée...

J'ai une table (MAIL_BD) avec 3 colonnes :
- id auto_increment
-mail (adresse mail)
-cat (catégorie donnée)

J'aimerais envoyer un email à tous les utilisateurs d'une même catégorie... Mais ça ne fonctionne pas...
<?php
// On récupère les données depuis le formulaire de contact
$nomEmetteur = $_POST['nomEmetteur']; // on récupère le nom
$idFicheA = $_POST['idFicheA']; // on récupère l'e-mail
$dateDemandeAnomalie = $_POST['dateDemandeAnomalie']; // on récupère l'e-mail

$bd = MaBD::getInstance(); // $bd est un objet PDO
 
$req = $bd->query("SELECT mail FROM MAIL_BD WHERE cat = 'ANOMALIE'"); // exécuter la requete

while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) // récupération de la requete sous forme de ligne pour l'exploitation
	{
// example on using PHPMailer with GMAIL
 
	include("/usr/share/php/libphp-phpmailer/class.phpmailer.php");
	include("/usr/share/php/libphp-phpmailer/class.smtp.php");
 
	$mail = new PHPMailer();
	$body             = "<body style=\"margin: 10px;\">
					<div style=\"width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;\"><br>
					Bonjour,<br><br>
					<strong>$nomEmetteur</strong> vient de saisir le <strong>$dateDemandeAnomalie</strong> une nouvelle fiche d'anomalie (fiche <strong>$idFicheA</strong>)<br><br>
					Florian BURTE					
					</body>";
 
$mail->IsSMTP();
$mail->SMTPAuth   = true;                  // enable SMTP authentication                // sets the prefix to the servier
$mail->Host       = "192.168.100.100";      // sets GMAIL as the SMTP server
$mail->Port       = 25;                   // set the SMTP port
$mail->Username   = "merah";  // GMAIL username
$mail->Password   = "xxxxx";        // GMAIL password
$mail->From       = "[email protected]";
$mail->FromName   = "MM";
$mail->Subject    = "Top Semence - Alerte Fiche Anomalie";
$mail->WordWrap   = 50; // set word wrap
$mail->MsgHTML($body);
$mail->AddReplyTo("[email protected]");
$mail->AddAddress('[email protected]'); // C'est ici le probleme... Je sais pas quoi mettre pour les autres adresses en fonction de ma table MySQL (à une catégorie précisée dans la requete..)
$mail->IsHTML(true); // send as HTML
 
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message has been sent";
}

?>
De l'aide serait la bienvenue.

Merci et bonne journée à tous.

Iutien

Modération : je me suis permet d'enlever le mot de passe de l'adresse mail :mrgreen:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mai 2013, 18:34

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.


salut,


- vire tous ce code du while seule le AddAddress doit être dans le while puisse que c'est la seule chose qui t'interesse.
- ne met pas les chemin en dur dans le code tu ne pourra changer de serveur sans devoir modifier ces chemins.


ton code peux ressembler à ça
<?php
// On récupère les données depuis le formulaire de contact
if (!empty($_POST['nomEmetteur']) && !empty($_POST['idFicheA']) && !empty($_POST['dateDemandeAnomalie'])) {
    $bd = MaBD::getInstance(); // $bd est un objet PDO
    $req = $bd->query("SELECT mail FROM MAIL_BD WHERE cat = 'ANOMALIE'"); // exécuter la requete
    $mail = new PHPMailer();
    while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // récupération de la requete sous forme de ligne pour l'exploitation
        $mail->AddAddress($ligne['mail']);
    }
    $req->closeCursor();
    // Il faut que /usr/share/php/libphp-phpmailer/ soit dans l'include path de php
    include("class.phpmailer.php");
    include("class.smtp.php"); // normalement phpmail se démerde tous seul

    $body = '<html>
                <body style="margin: 10px;">
                <div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"><br/>
                Bonjour,<br/><br/>
                <span style="font-weight: bold">' . htmlentities($_POST['nomEmetteur']) . '</span> vient de saisir le <span style="font-weight: bold">' . htmlentities($_POST['dateDemandeAnomalie']) . '</span> une nouvelle fiche d\'anomalie (fiche <span style="font-weight: bold">' . htmlentities($_POST['idFicheA']) . '</span>)<br/><br/>
                Florian BURTE
                </body></html>';
    $mail->IsSMTP();
    $mail->SMTPAuth = true; // enable SMTP authentication                // sets the prefix to the servier
    $mail->Host = "192.168.100.100"; // sets GMAIL as the SMTP server
    $mail->Port = 25; // set the SMTP port
    $mail->Username = "merah"; // GMAIL username
    $mail->Password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // GMAIL password
    $mail->From = "[email protected]";
    $mail->FromName = "MM";
    $mail->Subject = "Top Semence - Alerte Fiche Anomalie";
    $mail->WordWrap = 50; // set word wrap
    $mail->MsgHTML($body);
    $mail->AddReplyTo("[email protected]");
    $mail->IsHTML(true); // send as HTML

    if (!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message has been sent";
    }
} else {
    // erreur le formulaire n'est pas complet
}

?>
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 39 Messages

23 mai 2013, 09:15

J'ai trouvé l'erreur hier mais j'ai oublié de le mettre en résolu...
Merci à toi Moogli.

Bonne journée