Fonction mail php et template html [Résolu/Fermé]

Signaler
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
-
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
-
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

Messages postés
55
Date d'inscription
mardi 5 février 2013
Statut
Membre
Dernière intervention
8 juin 2018

Bonjour,

Comment est codé ton script ?
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
34
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......

Messages postés
6650
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 288
Bonjour,

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


par:
$msg_html = file_get_contents('template_mail/mail.php');
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
34
Lorsque j'utilise file_get_contents, mes variables sont vides lors de l'affichage.
Quelle autre solution ??
Messages postés
55
Date d'inscription
mardi 5 février 2013
Statut
Membre
Dernière intervention
8 juin 2018

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();
Messages postés
6650
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 288
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+
Messages postés
436
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2015
34
Merci beaucoup, ça fonctionne parfaitement.