IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

inscrire le nom du pseudo dans chaque mail


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut inscrire le nom du pseudo dans chaque mail
    Bonjour,
    N'ayant pas encore réussi a trouver cet enigme, je m'adresse encore a vous afin de m'aider a trouver enfin la solution.

    voila, j'envoie des mails avec phpmailer et je voudrais inclure le nom de chaque pseudo dans chaque mail.

    les mails se rendent parfaitement bien mais les pseudos ne se suivent pas, le mail envoie toujours le meme pseudo soit le dernier du array.
    je ne comprends pas pourquoi les mails se rendent a chacun leur destination dans la boucle et pas les pseudos.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
     
    if(isset ($_POST['submit']) && !empty ($_POST['submit'])) {			
     
    			$mail = new PHPmailer(); 
    			$mail->IsHTML(true); 
    			$mail->CharSet = "utf-8";
    			$mail->From='info@monsite.com'; 
    			//foreach($tableau_res as $donnees) {
    			foreach($tableau_res as $id => $donnees) {
    				//$Mailpseudo = $donnees["pseudo"];
    				//while($info = mysql_fetch_array($data, MYSQL_ASSOC )) {			
    				$mail->AddBCC ($donnees["courriel"]); 		
    				$mail->AddReplyTo('info@monsite.com');           
    				$mail->Subject='Ceci est un test'; 
    				$mail->Body='<html><head><style>p{font-size: larger;}.petit{font-size: 90%;}</style></head>'; 
    				$mail->Body.='<body><span style="float:left; clear:right;margin-right:8px;"><img src="http://www.monsite.com/images/logoAnnonceHalloween.jpg"></span>'; 
    				$mail->Body.='<h3>Bonjour '. $donnees["pseudo"].',</h3>'; 
    				$mail->Body.='<p> Vous avez été malheureusement choisi pour recevoir nos tests de mail comportant les noms du pseudo dans chaque mail.</p>';
    				$mail->Body.='<p>Si vous désirez ne plus recevoir ces tests, attendez que j\'aie résolu le probleme.</p>';
    				$mail->Body.='<p>Attention ! Ne pas répondre directement à ce courriel, car nous ne verrons pas votre message. Pour nous contacter, utilise plutot la rubrique <strong>Contactez-nous </strong>pour nous écrire.</p></body></html>';
    			}
     
    	  if(!$mail->Send()){ //Teste si le return code est ok. 
              echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) 
            } 
            else{      
              $messageSucces= '<h3>Mails envoyés avec succès !</h3>'; 
            } 
     
            unset($mail);
     
     
    	}
     
    ?>
    je vous inclu aussi le print_r de mon tableau
    array(3) { [0]=> array(3) { ["id"]=> string(2) "16" ["pseudo"]=> string(8) "rangaine" ["courriel"]=> string(16) "galant50@live.ca" } [1]=> array(3) { ["id"]=> string(2) "17" ["pseudo"]=> string(10) "Natascha" ["courriel"]=> string(29) "natascha.bellerive@gmail.com" } [2]=> array(3) { ["id"]=> string(3) "177" ["pseudo"]=> string(7) "Mantthol" ["courriel"]=> string(22) "manthol@hotmail.com" } }
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  2. #2
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par monlou Voir le message
    Bonjour,
    N'ayant pas encore réussi a trouver cet enigme...
    Tu cherches à trouver l'énigme, ou sa solution ? ;p

    Sinon, essaye avec le
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(!$mail->Send()){ //Teste si le return code est ok. 
              echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) 
    }else{      
              $messageSucces= '<h3>Mails envoyés avec succès !</h3>'; 
    } 
    unset($mail);
    dans la boucle du foreach et pas dehors... là tu fais seulement le parcourt de tes $tableau_res et tu n'envoies qu'un mail avec les dernières valeurs que ton foreach a générées.
    My daughter, my laptop, my bike and my double-sticks...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par kalimukti Voir le message
    ...dans la boucle du foreach et pas dehors....
    Bien vu.

    J'en connais un qui risque de s'en mordre les gosses... Tabernacle !

  4. #4
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    J'en connais un qui risque de s'en mordre les gosses
    faut être souple quand même !
    My daughter, my laptop, my bike and my double-sticks...

  5. #5
    Invité
    Invité(e)
    Par défaut
    ... ou très vieux...

  6. #6
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    My daughter, my laptop, my bike and my double-sticks...

  7. #7
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    merci Kalimukti pour ta réponse mais ca cause une erreur lorsque je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!$mail->Send()){ //Teste si le return code est ok. 
              echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) 
    }else{      
              $messageSucces= '<h3>Mails envoyés avec succès !</h3>'; 
    } 
    unset($mail);
    dans la boucle
    l'erreur c'est :
    Fatal error: Call to a member function AddBCC() on a non-object in /home/... on line 42
    on dirait qu'il ne reconnait plus ma variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php$mail->AddBCC ($donnees["courriel"]);?>
    mais je veux en revenir a mon code ci-haut, les mails étaient envoyés au 3 adresses distinctes et pourquoi pas les pseudos ?
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  8. #8
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    alors, pour répondre à tes deux points:
    pour le call ... on a non-object:
    c'est parce que je suis allé un peu vite dans ma réponse. C'est à cause du unset: unset détruit une variable, donc ici $mail. Tu ne peux donc plus faire appel à $mail dans l'itération suivante de ton foreach...
    Tu peux soit recréer un $mail = new PHPmailer(); dans la boucle,
    soit ne faire le unset qu'après la boucle:

    exemple de code:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    if(isset ($_POST['submit']) && !empty ($_POST['submit'])) {			
    	foreach($tableau_res as $id => $donnees) {
    		$mail = new PHPmailer(); 
    		$mail->IsHTML(true); 
    		$mail->CharSet = "utf-8";
    		$mail->From='info@monsite.com'; 		
    		$mail->AddBCC ($donnees["courriel"]); 		
    		$mail->AddReplyTo('info@monsite.com');           
    		$mail->Subject='Ceci est un test'; 
    		$mail->Body='<html><head><style>p{font-size: larger;}.petit{font-size: 90%;}</style></head>'; 
    		$mail->Body.='<body><span style="float:left; clear:right;margin-right:8px;"><img src="http://www.monsite.com/images/logoAnnonceHalloween.jpg"></span>'; 
    		$mail->Body.='<h3>Bonjour '. $donnees["pseudo"].',</h3>'; 
    		$mail->Body.='<p> Vous avez été malheureusement choisi pour recevoir nos tests de mail comportant les noms du pseudo dans chaque mail.</p>';
    		$mail->Body.='<p>Si vous désirez ne plus recevoir ces tests, attendez que j\'aie résolu le probleme.</p>';
    		$mail->Body.='<p>Attention ! Ne pas répondre directement à ce courriel, car nous ne verrons pas votre message. Pour nous contacter, utilise plutot la rubrique <strong>Contactez-nous </strong>pour nous écrire.</p></body></html>';
     
    	  	if(!$mail->Send()){ //Teste si le return code est ok. 
                          echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) 
                    } else{      
                          $messageSucces= '<h3>Mails envoyés avec succès !</h3>'; 
                    } 
     
                    unset($mail);
    	}//end foreach
    }

    pour ta deuxième question: vu que tu ne faisais le unset qu'à la fin:
    toutes les données de ton $mail étaient écrasées et remplacées à chaque itération de ton foreach sauf:
    et
    qui elles sont des tableaux, donc les valeurs de chaque itération du foreach s'y sont accumulées au lieu d'y être écrasées... je ne sais pas si ce que je dis est clair mais bon....
    My daughter, my laptop, my bike and my double-sticks...

  9. #9
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    merci Kalimukti pour ces explications! je comprends mieux la !

    et avec cette structure de code, ca passe comme je le voulais
    mais juste un petit hic,
    Je trouve que contrairement a mes autres envois, le temps d'exécution du traitement est 5 a 6 fois plus lent

    meme avec 3 mails, alors j'ai hate de voir ce que ca va donner avec 250 mails
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  10. #10
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par monlou Voir le message
    le temps d'exécution du traitement est 5 a 6 fois plus lent

    meme avec 3 mails, alors j'ai hate de voir ce que ca va donner avec 250 mails
    Bah ouai... ça dépend aussi de ton serveur...
    Perso, ces envoies-là, je les fais par une cron task la nuit...
    My daughter, my laptop, my bike and my double-sticks...

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A noter que tu n'es pas obligé de tout re-créer à chaque tour de boucle : tu peux te contenter de changer l’adresse, le pseudo dans le corps et relancer le même mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    <?php
     
    if (isset($_POST['submit']) && !empty($_POST['submit'])) {
        $body = '<html><head><style>p{font-size: larger;}.petit{font-size: 90%;}</style></head>';
        $body.= '<body><span style="float:left; clear:right;margin-right:8px;"><img src="http://www.monsite.com/images/logoAnnonceHalloween.jpg"></span>';
        $body.= '<h3>Bonjour #pseudo#,</h3>';
        $body.= '<p> Vous avez été malheureusement choisi pour recevoir nos tests de mail comportant les noms du pseudo dans chaque mail.</p>';
        $body.= '<p>Si vous désirez ne plus recevoir ces tests, attendez que j\'aie résolu le probleme.</p>';
        $body.= '<p>Attention ! Ne pas répondre directement à ce courriel, car nous ne verrons pas votre message. Pour nous contacter, utilise plutot la rubrique <strong>Contactez-nous </strong>pour nous écrire.</p></body></html>';
     
        // init mailer
        $mail = new PHPmailer();
        $mail->IsHTML(true);
        $mail->CharSet = "utf-8";
        $mail->From = 'info@monsite.com';
        $mail->AddReplyTo('info@monsite.com');
        $mail->Subject = 'Ceci est un test';
        foreach($tableau_res as $id => $donnees) {
     
            // change l'adresse
     
            $mail->clearBCCs();
            $mail->AddBCC($donnees["courriel"]);
     
            // corps avec remplacement du marque-place
     
            $mail->Body = str_replace('#pseudo#', $donnees["pseudo"], $body);
     
            // envoi du mail
     
            if (!$mail->Send()) { //Teste si le return code est ok.
                echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7)
            }
            else {
                $messageSucces = '<h3>Mails envoyés avec succès !</h3>';
            }
        } //end foreach
    }
    Au passage, personnellement, j'utilise la technique du "marque-place" pour les choses qui changent dans un texte fixe : un marqueur dans le texte et un coup de str_replace au moment où je veux l'utiliser.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/10/2015, 20h34
  2. retourner nom et valeur de chaque colonne dans plusieurs lignes
    Par azur668 dans le forum Développement
    Réponses: 13
    Dernier message: 14/04/2010, 12h46
  3. Nom de la pièce jointe incomplet dans le mail reçu
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2009, 16h46
  4. [WD14] Faire apparaitre un nom de destinataire dans un mail
    Par Bowen dans le forum WinDev
    Réponses: 2
    Dernier message: 06/08/2009, 09h12
  5. [Mail] Extraction d'un nom d'image dans une chaine
    Par TmR14 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2007, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo