Fonction mail php et template html

Résolu
Rom190686 Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   -  
Rom190686 Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Dans le but de relancer mes clients automatiquement, j'ai développé un script d'envoi de mail auto.

Tout fonctionne parfaitement à l'exception de la personnalisation du mail. Je m'explique...

Dès lors que je souhaite ajouter une variable $nom ou $prenom dans mon mail pour le personnaliser, j'utilise include pour appeler mon template, et là, le corps de mon mail retourne "1"... Tout le texte à disparu.

Que faire ?

D'où vient ce problème ???

2 réponses

  1. diendi Messages postés 62 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour,

    Comment est codé ton script ?
    0
  2. Rom190686 Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   35
     
    une classe qui contient la fonction mail, une page php pour executer le script et un fichier html qui contient le template : extrait

    public function envoiEmail($destinataire, $sujet_mail) {
    foreach ($destinataire as $value_destinataire) {

    $destimail = $value_destinataire['email'];
    $nom = $value_destinataire['lastname'];
    $prenom = $value_destinataire['firstname'];

    $ligne = "\n";

    $msg_text = "message texte";
    $msg_html = include('template_mail/mail.php');

    etc......

    0
    1. diendi Messages postés 62 Date d'inscription   Statut Membre Dernière intervention  
       
      OK.

      Le soucis vient de include, voici un peu de lecture : https://www.php.net/manual/fr/function.include.php

      Include ne renvoie pas le contenu de ton template dans la variable $msg_html, pour alimenter cette variable, il faut la placer dans ton template.
      0
    2. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      Bonjour,

      remplacer:
      $msg_html = include('template_mail/mail.php');


      par:
      $msg_html = file_get_contents('template_mail/mail.php');
      0
    3. Rom190686 Messages postés 445 Date d'inscription   Statut Membre Dernière intervention   35
       
      Lorsque j'utilise file_get_contents, mes variables sont vides lors de l'affichage.
      Quelle autre solution ??
      0
    4. diendi Messages postés 62 Date d'inscription   Statut Membre Dernière intervention  
       
      2 solutions :

      1/ Inclure ta variable dans ton template comme indiqué ci-dessus

      2/ Passer par une bufferisation de sortie :

      ob_start();
      include('template_mail/mail.php');
      $msg_html = ob_get_clean();
      
      0
    5. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
       
      variables, mais des "étiquettes", exemple:

      "Bonjour Monsieur #NOM#,
      Nous vous informons que le véhicule #IMMATRICULE# est dans nos locaux depuis #DATE#"

      Ca c'est le contenu qui va dans $msg_html

      ensuite, vous faites un str_replace, par exemple:

      $msg_html = str_replace("#NOM#", "ALBERTINI", $msg_html);

      ...et de même pour toutes les "étiquettes"

      et vérifiez par:
      echo $msg_html; // mettre en commentaire si OK


      Voici un search/replace:

      $searchReplace = array(
          '#civilite#' => 'Mr',
          '#NOM#' => 'ALEXANDRIN',
          '#Prenom#' => 'Albert',
          '#Ad1#' => '98 rue Des Poêtes',
          '#cp#' => '92260',
          '#Ad2#' => null,
          '#ville#' => 'LA CELLE SAINT CLOUD',
          '#tel#' => '0143556677'
          );
       
      $search  = array_keys($searchReplace);
      $replace = array_values($searchReplace);
      
      $myFile = file_get_contents('template_mail/mail.php');
       
      $msg_html str_replace($search, $replace, $myFile);


      Ici le $searchReplace est un tableau associatif. A vous de l'adapter avec des variables alimentées par votre base de données.

      A+
      0