Envoi Mail par PHP - format HTML non reconnu

mel2311mel2311 Member
Bonjour,

J'utilise la fonction mail() de php pour envoyer un mail reprenant les éléments d'un formulaire lorsque celui-ci est validé. J'ai construit mon mail en format HTML afin de pouvoir faire un minimum de mise en forme.

Mon mail s'envoi bien, par contre, son affichage n'est pas respecté : le HTML ne semble pas reconnu et il s'affiche donc avec toutes les balises.

Comme je ne savais pas faire, j'ai travaillé à partir de tutos / codes trouvés sur le net mais ce ne doit pas être parfaitement appliqué...


Voici mon code pour l'envoi du mail :
[== PHP ==]
<?php

// Déclaration de l'adresse de destination.
$mail = 'xxxx@xxxxxx.fr';

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
{
 $passage_ligne = "\r\n";
}
else
{
 $passage_ligne = "\n";
}

//construction du contenu du message a partir des donnees du formulaire
$message_html = "<html><head></head><body><u><b>Détails de la demande d'inscription :</b></u><br><br>";
$message_html.= "<b>Nom : </b>".$_POST['nom']."<br>";
$message_html.= "<b>Prenom : </b>".$_POST['prenom']."<br><br>";
$message_html.= "<b>Age: </b>".$_POST['age']."<br>";
$message_html.= "</body></html>";

//=====Création de la boundary
$boundary = "-----=".md5(rand());

//=====Définition du sujet.
$sujet = "Demande d'inscription (De ".$_POST['nom']." ".$_POST['prenom'].")";

//=====Création du header de l'e-mail.
$header = "From: ".$_POST['nom']." ".$_POST['prenom']."<".$_POST['courriel'].">".$passage_ligne;
$header.= "Reply-to: ".$_POST['nom']." ".$_POST['prenom']."<".$_POST['courriel'].">".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;

//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;

//=====Envoi de l'e-mail 
mail($mail,$sujet,$message,$header);
?>

En autre, j'ai l'impression que la notion de $passage_ligne n'est pas reconnu..

Pour info, mon site est hébergé par online.net si cela peut crée une spécificité.

Merci pour votre aide !

M.B

Réponses

  • YannicYannic Member
    mai 2018 modifié
    Salut,

    Pas a maison pour le moment mais de ce que je vois tu envoie en multipart/alternative or au final tu n'envoie qu'un message html au lieu d'envoyer le message en text clair et ce meme message en html

    Pas compris a quoi servais ton passage_ligne mais a mon avis tu t'embête pour rien

    https://www.arobase.org/newsletters/mime-multipart-alternative.htm

    Buster/NGINX/PHP7/PluXml5.8

  • mel2311mel2311 Member
    Bonjour Yannic,

    Merci pour ta réponse.
    J'ai modifié multipart/alternative pour ne mettre que text/html dans le header (et je l'ai donc retirer du corps du message), et maintenant cela fonctionne correctement.

    Au sujet du $passage_ligne, j'avais trouvé cela dans les tutos de mise en place des mails mais je ne sais pas bien non plus à quoi cela sert.
    De même pour "boudary" qui était donné comme utile pour séparer les éléments mais si je le laisse ainsi, il s'affiche partout... pas très élégant ! donc je l'ai retiré du corps de message aussi.
Connectez-vous ou Inscrivez-vous pour répondre.