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 :

PHPMailer - Inclure une variable/ou du php dans le corps du message


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut PHPMailer - Inclure une variable/ou du php dans le corps du message
    Bonjour à toute et à tous,

    Je transmets des messages par le biais de PHPMailer.
    Lorsque le message est figé, pas de soucis ce dernier est transmis.

    En revanche dés lors que je souhaite inclure une variable (ou tout simplement écrire du php), le programme n'effectue pas sa tâche.
    Ce qui est embêtant si je souhaite réaliser une newsletter incluant le prénom, changement d'adresse e-mail de destinataire...
    D’où ma question, comment inclure du php dans un message sans faire planter phpmailer?

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Essai</title>
    </head>
     
    <body>
     
    <h1> TEST PHP MAILER </H1>
     
    	<?php
     
    		use PHPMailer\PHPMailer\PHPMailer; //? Aucune idée sur l'utilité de cela
    		use PHPMailer\PHPMailer\Exception; //? Aucune idée sur l'utilité de cela
    		use PHPMailer\PHPMailer\SMTP; //? Aucune idée sur l'utilité de cela
     
    		require_once "PHPMailer/Exception.php"; 
    		require_once "PHPMailer/PHPMailer.php";
    		require_once "PHPMailer/SMTP.php";
     
    		$mail = new PHPMailer(true);
     
    		try
    		{
    		//Server settings
    			$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Debugage. Est ce vraiment utile pour moi?
    			$mail->IsSMTP();                                            // Procole pour envoyer les emails. 
    			$mail->Host       = 'ssl0.ovh.net';                     		// Ou trouver cette information? 
    			$mail->SMTPAuth   = true;                                   // Existe t-il une authentification à réaliser? 
    			$mail->Username   = 'monadresse';                     // En lien avec l'authentification. Reste à trouver ou je peux avoir cela... 
    			$mail->Password   = 'motdepasse';                               // Idem ci-dessus
    			$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            // 
    			$mail->Port       = 465;                                    // S'il y a auth alors je dois mettre 587 car... aucune idée. 
     
    			//Recipients
    			$mail->setFrom('expediteur', 'expediteur'); 		    // Emetteur de l'email
    			$mail->addAddress('test-qc4065igv@srv1.mail-tester.com', 'Prenom');     	    // Faire un while pour générer les destinataires (1 destinataire par addadresse)
     
    			// Encodage
    			$mail->CharSet = 'UTF-8';
     
    			//Content
    			$mail->isHTML(true);                                 	   // Email au ormat HTML
    			$mail->Subject = 'Newsletter';
    			$mail->Body    = '
    			Bonjour '<?php echo $ma_variable;?>',	
    			';               
    			// Contenu au format HTML
    			$mail->AltBody = 'Message hors prise en compte HTML';      // Contenu hors format HTML
     
    			$mail->send();
     
    			// Je vais générer un message dans un fichier texte si ca plante
    			echo "email transmis";
     
    		} 
    		catch (Exception $e) 
    		{
    			echo "email non transmis";
    		}
    	?>
     
     
    </body>
     
    </html>
    D'avance merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 420
    Points : 15 789
    Points
    15 789
    Par défaut
    "echo" sert à envoyer du code html qui sera affiché par le navigateur.

    là vous voulez construire une chaine de caractères à partir de variables donc regardez les exemples de cette page :
    https://www.php.net/manual/fr/language.types.string.php

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Vous faites référence à ce passage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $mail->Body    = '
    Bonjour '<?php echo "Ma variable php";?>',	
    ';
    Si c'est bien cela, je n'ai pas pris la peine de remettre une variable, car l'insertion des balises <?php ?> suffit à faire planter php mailer.
    C'est pour cela que je suis resté sur quelque chose de simple

    EDIT: Bien noté pour les ' à la place des ".
    Cela étant, j'ai placé echo pour le fun. Le vrai code était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bonjour '<?php echo $ma_variable; ?>', blablablablabla
    EDIT2: J'ai modifié le code de mon premier post en ce sens => remplacer le echo "ma variable" par <?php echo $ma_variable; ?>.

    EDIT3: Si je comprends bien les exemples donnés dans votre lien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <?php echo " Comme je suis en guillemet double et non en simple, $ma_variable_va_safficher, c'est bien cela?";?>

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Merci Mathieu

  5. #5
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Bonsoir,

    Je viens de découvrir PHPMailer, moi je l'utilise via une fonction (utilisé sur plusieurs pages) et je dois donc transmettre une variables !
    Je peux tout utiliser : FROM,TO,CC,BCC et pièces jointes (multi pièces via un ARRAY) sans que tout soit nécessaire !

    Simplement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mail->Body    = $email_texte;
    Ma variable contient tout le texte avec les balise HTML nécessaires.

    Si c'est cela que vous avez besoin.

    ddaweb

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Bonjour,

    Je vous conseillerais d'utiliser un système de template comme twig.
    C'est plus souple, vous pouvez éditer vos templates sans devoir triturer le code.

    Vous dites que ça plante, mais alors vous avez omis de le plus important: le détail de l'exception. Très probablement, ça vous dira où se situe le problème et ça vous éviterait de deviner ce qui ne va pas dans le code.

  7. #7
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Vous dites que ça plante, mais alors vous avez omis de le plus important: le détail de l'exception. Très probablement, ça vous dira où se situe le problème et ça vous éviterait de deviner ce qui ne va pas dans le code.
    En effet cela peu aider à déboguer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch (PHPMailer\PHPMailer\Exception $e) { votre code;  echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }
    J'ai commenté l'exception pour l'utilisation normale, histoire de le réactiver en cas de problème ! :
    /*echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";*/
    Perso j'ai eu un eu un problème de token sur 'use' !?? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    use PHPMailer\PHPMailer\SMTP;
    Je l'ai résolu en ne l'utilisant pas et l'intégrant dans le code directement (même si cela était plus facile avec 'use' ), comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mail = new PHPMailer\PHPMailer\PHPMailer(true);
    Ce problème, je n'étais pas le seul à le rencontrer, c'est sur des forum que j'ai trouvé la solution.
    Je n'ai pas compris pourquoi cela se passait (ni trouvé la raison ou solution autre que ci-dessus), que ce soit PHP 7.4.9 ou PHP 8.1.13 (je suis même descendu à 5.6) -> PHPMailer 6.6.5 fonctionne très bien dans les 2 versions de PHP
    En quoi "Twig" peut lui faciliter la vie ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Citation Envoyé par ddaweb Voir le message
    J'ai commenté l'exception pour l'utilisation normale, histoire de le réactiver en cas de problème ! :
    C'est normal de ne pas afficher une exception brute à l'utilisateur, au lieu de ça il vaut mieux montrer un message d'erreur générique.
    Mais si une exception se produit, il faudrait l'écrire dans un log.
    C'est beaucoup plus facile pour débugger, surtout quand c'est en prod.
    De plus, certaines exceptions ne se produisent que de manière sporadique ou dans des conditions que vous ne pourrez toujours pas reproduire facilement. Avoir un trace dans un fichier permet d'éviter de jouer à la devinette.

    Citation Envoyé par ddaweb Voir le message
    En quoi "Twig" peut lui faciliter la vie ?
    Le but c'est de créer des templates avec des tags qui seront remplacés par les valeurs que vous fournissez (variables)
    Ca peut être des pages HTML aussi.
    C'est le même principe que Jinja (utilisé avec Python ou Ansible).

    Ca permet aussi d'alléger le code quand les messages sont plus longs, notamment pour des messages HTML.
    C'est aussi intéressant pour la gestion du multilingue.

  9. #9
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    C'est normal de ne pas afficher une exception brute à l'utilisateur, au lieu de ça il vaut mieux montrer un message d'erreur générique.
    Mais si une exception se produit, il faudrait l'écrire dans un log.
    C'est beaucoup plus facile pour débugger, surtout quand c'est en prod.
    De plus, certaines exceptions ne se produisent que de manière sporadique ou dans des conditions que vous ne pourrez toujours pas reproduire facilement. Avoir un trace dans un fichier permet d'éviter de jouer à la devinette.
    C'est tout à fait faisable en écrivant le code ad hoc, le tout est de voir si cela en vaut la peine d'y passer du temps : je n'ai que 1 jour d'expérience en production (déjà une cinquantaine de mails envoyés), mais si des erreurs devraient apparaître sporadiquement, je tiens compte de votre remarque
    J'ai fait pas mal d'essais, et pas eu le moindre accroc, aussi bien en localhost que sur le serveur (espace de test évidemment).

    Pour Twig, il faut en avoir le besoin, dans mon cas c'est une interface de gestion sur mesure pour une association (gestion membres et chiens, rappels, comptabilité, statistiques, CSV, etc...), cela ne me semble pas être une solution facile à mettre en place (d'abord apprendre Twig ) -> pour les quelques codes redondants, je fais des fonctions ou des pages à inclure, mais j'en ai très peu : chaque page ayant sa propre utilité et différente l'une de l'autre par des requêtes MySQL propres la plupart du temps. Si je dois faire autant de templates que de pages, autant faire les pages

  10. #10
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    @BOU59000 : Tu as su résoudre ton problème ?

  11. #11
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Oui j'ai su résoudre mon soucis et placé le post en "Résolu" le 29/11/2022.

    Du coup je viens de voir vos réponses à l'instant.
    Car je ne retourne plus sur les posts où une solution a déjà été apportée.

    Merci pour l'attention que vous avez porté à ce post.

    Bonne journée.

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

Discussions similaires

  1. Initialiser une variable de session PHP dans un script JS
    Par francky74 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 05/03/2015, 16h57
  2. Inclure une variable php dans du javascript
    Par BLJ.CHAUVIN dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/12/2010, 12h24
  3. récupérer une variable de session php dans flash
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 14/06/2008, 00h20
  4. Peut-on inclure une variable dans une chaîne SQL ?
    Par beegees dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2006, 11h31
  5. Réponses: 4
    Dernier message: 05/10/2005, 18h19

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