Souci d'envoi de courriel au format HTML

Mammouth du PHP | 2937 Messages

22 sept. 2006, 14:21

Salut à tous!

Pour un site professionnel, je développe un formulaire de contact, avec des champs texte et des cases à cocher. Une fois ce formulaire rempli, le destinataire reçoit un courriel au format HTML qui reprend les données du formulaire.

Les champs texte sont correctement restitués. En revanche, les cases cochées ne le sont plus dans le courriel que reçoit le destinataire. En outre, la feuille de style n'habille pas le courriel.

Voici le fichier contact.php.
<?php 
include ("fonctions/encodage-html.php");

// Définition des champs du formulaire (avec protection de l'adresse électronique, en remplaçant @ par *at*) et de l'état des cases à cocher
$societe=(isset($_POST['societe']))? encodage_html($_POST['societe']): '';
$nom=(isset($_POST['nom']))? strtoupper(encodage_html($_POST['nom'])): '';
$prenom=(isset($_POST['prenom']))? encodage_html($_POST['prenom']): '';
$telephone=(isset($_POST['telephone']))? $_POST['telephone']: '';
$courriel=(isset($_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
$adresse=(isset($_POST['adresse']))? encodage_html($_POST['adresse']): '';
$code_postal=(isset($_POST['code_postal']))? $_POST['code_postal']: '';
$ville=(isset($_POST['ville']))? strtoupper(encodage_html($_POST['ville'])): '';
$rendez_vous=(isset($_POST['rendez_vous']))? ' checked="checked"': '';
$devis=(isset($_POST['devis']) && !empty($devis))? ' checked="checked"': '';
$terrain_tel=(isset($_POST['terrain_tel']))? ' checked="checked"': '';
$terrain_faf=(isset($_POST['terrain_faf']))? ' checked="checked"': '';
$terrain_quali=(isset($_POST['terrain_quali']))? ' checked="checked"': '';
$terrain_web=(isset($_POST['terrain_web']))? ' checked="checked"': '';
$terrain_btob=(isset($_POST['terrain_btob']))? ' checked="checked"': '';
$terrain_btoc=(isset($_POST['terrain_btoc']))? ' checked="checked"': '';
$terrain_btor=(isset($_POST['terrain_btor']))? ' checked="checked"': '';
$volume_questionnaire=(isset($_POST['volume_questionnaire']))? encodage_html($_POST['volume_questionnaire']): '';
$observations=(isset($_POST['observations']))? encodage_html($_POST['observations']): '';
$doc_terrain_tel=(isset($_POST['doc_terrain_tel']))? ' checked="checked"': '';
$doc_terrain_faf=(isset($_POST['doc_terrain_faf']))? ' checked="checked"': '';
$doc_terrain_quali=(isset($_POST['doc_terrain_quali']))? ' checked="checked"': '';
$doc_terrain_ligne=(isset($_POST['doc_terrain_ligne']))? ' checked="checked"': '';
$doc_prestation_complementaire=(isset($_POST['doc_prestation_complementaire']))? ' checked="checked"': '';
  
// On vérifie si les champs obligatoires sont tous correctement renseignés
if ((isset($_POST['societe']) && !empty($societe)) && (isset($_POST['nom']) && !empty($nom)) && (isset($_POST['prenom']) && !empty($prenom)) && (isset($_POST['telephone']) && !empty($telephone)) && (isset($_POST['courriel']) && !empty($courriel)) && (!eregi("\n", $courriel) || !eregi("\r", $courriel))){
  include ("biblio/courriel.php");
  mail($destinataire, $objet, $message, $en_tete);
  $avertissement='Le formulaire a bien &eacute;t&eacute; envoy&eacute;. Merci de l\'avoir rempli.';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="toolbar" content="no" />
<meta name="keywords" content="" />
<title>Contact</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>

<body id="haut">
<div id="page">
  <div id="corps">
    <h1>Contact</h1>
    <div id="corps-cadre">
<?php 
// Affichage du formulaire
if (!isset($_POST['societe']) || empty($societe) || !isset($_POST['nom']) || empty($nom) || !isset($_POST['prenom']) || empty($prenom) || !isset($_POST['telephone']) || empty($telephone) || !isset($_POST['courriel']) || empty($courriel) || eregi("\n", $courriel) || eregi("\r", $courriel)){
?>
      <p>Vous souhaitez obtenir un rendez-vous, un devis ou tout simplement une documentation&hellip;</p>
      <p>Merci de bien vouloir remplir le formulaire ci-joint.</p>
      <form id="contact" method="post" action="contact.php">
        <ul>
          <li><input class="champ-obligatoire" type="text" value="* Soci&eacute;t&eacute;" disabled="disabled" /><input id="societe" name="societe" type="text" value="<?php echo $societe ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* Nom" disabled="disabled" /><input id="nom" name="nom" type="text" value="<?php echo $nom ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* Pr&eacute;nom" disabled="disabled" /><input id="prenom" name="prenom" type="text" value="<?php echo $prenom ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* T&eacute;l&eacute;phone" disabled="disabled" /><input id="telephone" name="telephone" type="text" value="<?php echo $telephone ?>" /></li>
          <li><input class="champ-obligatoire" type="text" value="* E-mail" disabled="disabled" /><input id="courriel" name="courriel" type="text" value="<?php echo $courriel ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Adresse" disabled="disabled" /><input id="adresse" name="adresse" type="text" value="<?php echo $adresse ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Code postal" disabled="disabled" /><input id="code_postal" name="code_postal" type="text" value="<?php echo $code_postal ?>" /></li>
          <li><input class="champ-facultatif" type="text" value="Ville" disabled="disabled" /><input id="ville" name="ville" type="text" value="<?php echo $ville ?>" /></li>
          <li class="champ-divers">Je souhaite obtenir un rendez-vous de pr&eacute;sentation <input id="rendez_vous" name="rendez_vous" type="checkbox"<?php echo $rendez_vous ?> /></li>
          <li class="champ-divers">Je souhaite obtenir un devis <input id="devis" name="devis" type="checkbox"<?php echo $devis ?> /></li>
          <li class="champ-divers">Terrain&nbsp;: t&eacute;l&eacute;phone&nbsp;<input id="terrain_tel" name="terrain_tel" type="checkbox"<?php echo $terrain_tel ?> /> face &agrave; face <input id="terrain_faf" name="terrain_faf" type="checkbox"<?php echo $terrain_faf ?> /> recrutement quali <input id="terrain_quali" name="terrain_quali" type="checkbox"<?php echo $terrain_quali ?> /> Web <input id="terrain_web" name="terrain_web" type="checkbox"<?php echo $terrain_web ?> /> B to B <input id="terrain_btob" name="terrain_btob" type="checkbox"<?php echo $terrain_btob ?> /> B to C <input id="terrain_btoc" name="terrain_btoc" type="checkbox"<?php echo $terrain_btoc ?> /> B to R <input id="terrain_btor" name="terrain_btor" type="checkbox"<?php echo $terrain_btor ?> /></li>
          <li class="champ-divers">Volume de questionnaires <input id="volume_questionnaire" name="volume_questionnaire" type="text" value="<?php echo $volume_questionnaire ?>" /></li>
          <li class="champ-divers">Observations <textarea id="observations" name="observations" cols="30" rows="6"><?php echo $observations ?></textarea></li>
          <li class="champ-divers">Je souhaite une documentation commerciale&nbsp;: terrain t&eacute;l&eacute;phone <input id="doc_terrain_tel" name="doc_terrain_tel" type="checkbox"<?php echo $doc_terrain_tel ?> /> terrain face &agrave; face <input id="doc_terrain_faf" name="doc_terrain_faf" type="checkbox"<?php echo $doc_terrain_faf ?> /> terrain quali <input id="doc_terrain_quali" name="doc_terrain_quali" type="checkbox"<?php echo $doc_terrain_quali ?> /> terrain en ligne <input id="doc_terrain_ligne" name="doc_terrain_ligne" type="checkbox"<?php echo $doc_terrain_ligne ?> /> prestations compl&eacute;mentaires <input id="doc_prestation_complementaire" name="doc_prestation_complementaire" type="checkbox"<?php echo $doc_prestation_complementaire ?> /></li>
          <li id="validation"><input id="envoi" type="submit" value="Envoyer" /></li>
        </ul>
      </form>
<?php 
}
else{
?>
      <p id="avertissement"><?php echo $avertissement ?></p>
      <ul id="retour">
        <li><a href="index.php" title="Retour &agrave; l'accueil">Retour &agrave; l'accueil</a></li>
      </ul>
<?php 
}
?>
    </div>
  </div>
</div>
</body>
</html>
Et voici le fichier courriel.php en question.
<?php 
// Paramètres du courriel
$destinataire='[email protected]';
$objet='Contact';
$message='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contact</title>
<link href="<!-- Lien absolu vers le fichier styles.css -->" rel="stylesheet" type="text/css" />
</head>

<body id="haut">
<div id="corps">
  <form id="contact" method="post" action="contact.php">
    <ul>
      <li>Soci&eacute;t&eacute;&nbsp;: '.$societe.'</li>
      <li>Nom"&nbsp;: '.$nom.'</li>
      <li>Pr&eacute;nom&nbsp;: '.$prenom.'</li>
      <li>T&eacute;l&eacute;phone&nbsp;: '.$telephone.'</li>
      <li>E-mail&nbsp;: '.$courriel.'</li>
      <li>Adresse&nbsp;: '.$adresse.'</li>
      <li>Code postal&nbsp;: '.$code_postal.'</li>
      <li>Ville&nbsp;: '.$ville.'</li>
      <li class="champ-divers">Je souhaite obtenir un rendez-vous de pr&eacute;sentation <input id="rendez_vous" name="rendez_vous" type="checkbox"'.$rendez_vous.' disabled="disabled" /></li>
      <li class="champ-divers">Je souhaite obtenir un devis <input id="devis" name="devis" type="checkbox"'.$devis.' disabled="disabled" /></li>
      <li class="champ-divers">Terrain&nbsp;: t&eacute;l&eacute;phone&nbsp;<input id="terrain_tel" name="terrain_tel" type="checkbox"'.$terrain_tel.' /> face &agrave; face <input id="terrain_faf" name="terrain_faf" type="checkbox"'.$terrain_faf.' /> recrutement quali <input id="terrain_quali" name="terrain_quali" type="checkbox"'.$terrain_quali.' /> Web <input id="terrain_web" name="terrain_web" type="checkbox"'.$terrain_web.' /> B to B <input id="terrain_btob" name="terrain_btob" type="checkbox"'.$terrain_btob.' /> B to C <input id="terrain_btoc" name="terrain_btoc" type="checkbox"'.$terrain_btoc.' /> B to R <input id="terrain_btor" name="terrain_btor" type="checkbox"'.$terrain_btor.' /></li>
      <li class="champ-divers">Volume de questionnaires&nbsp;: '.$volume_questionnaire.'</li>
      <li class="champ-divers">Observations&nbsp;:'.$observations.'</li>
      <li class="champ-divers">Je souhaite une documentation commerciale&nbsp;: terrain t&eacute;l&eacute;phone <input id="doc_terrain_tel" name="doc_terrain_tel" type="checkbox"'.$doc_terrain_tel.' /> terrain face &agrave; face <input id="doc_terrain_faf" name="doc_terrain_faf" type="checkbox"'.$doc_terrain_faf.' /> terrain quali <input id="doc_terrain_quali" name="doc_terrain_quali" type="checkbox"'.$doc_terrain_quali.' /> terrain en ligne <input id="doc_terrain_ligne" name="doc_terrain_ligne" type="checkbox"'.$doc_terrain_ligne.' /> prestations compl&eacute;mentaires <input id="doc_prestation_complementaire" name="doc_prestation_complementaire" type="checkbox"'.$doc_prestation_complementaire.' /></li>
    </ul>
  </form>
</div>
</body>
</html>
';
$en_tete="Content-Type: text/html; charset=iso-8859-1\r\nMIME-Version: 1.0\r\nFrom: $courriel\r\n";
?>
Quant au fichier encodage-html.php, le voici:
<?php 
function encodage_html($chaine){
  $chaine=stripslashes($chaine);
  $chaine=htmlentities($chaine, ENT_COMPAT);
  $caracteres_non_codes=array('Œ', 'œ', 'Ÿ', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '•', '…', '‰', '‹', '›', '€', '™');
  $caracteres_codes=array('&OElig;', '&oelig;', '&Yuml;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&Dagger;', '&bull;', '&hellip;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&trade;');
  $encodage_html=str_replace($caracteres_non_codes, $caracteres_codes, $chaine);
  return $encodage_html;
}
?>
Aidez-moi, je vous en prie: c'est pour un site professionnel qui doit être mis en ligne le plus tôt possible.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

22 sept. 2006, 15:03

Note : Si vous prévoyez d'envoyer des mails HTML ou autrement plus complexes, il est recommandé d'utiliser le paquet PEAR PEAR::Mail.
Par ailleurs, que donne le code source HTML de l'email ?
Que contient <!-- Lien absolu vers le fichier styles.css -->, est-ce bien une URL en http:// ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.