Page 1 sur 1

Problème avec la fonction MAIL

Posté : 09 sept. 2011, 16:17
par nordine
Bonjour,
Lorsque j'envoie un mail avec PHP, j'ai trois erreurs à la réception :
- les boundary permetant de délimiter le texte sont visibles dans le mail reçu.
- les balises html ne sont pas interprétées
- les mails sont reçus en tant que spam

Voici le code :
// fonction message (format html)
function message_mail_html($message_html)
{
   // initialisation
   $message = "";		
   // retour à la ligne
   $passage_ligne = "\r\n";
   // boundary utile pour le content type
   $boundary = "-----=".md5(rand());
   // MESSAGE DU MAIL
   $message = $passage_ligne."--".$boundary.$passage_ligne;
   $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;
   return $message;
}
//fonction header 
function header_mail($mail, $nom)
{
  // initialisation
  $passage_ligne = "";
  $exp = "";
  $ret = "";
  $mime = "";
  $content = "";
  $header = "";
  // retour à la ligne
  $passage_ligne = "\r\n";
  // boundary utile pour le content type
  $boundary = "-----=".md5(rand());		
  // adresse expediteur
  $exp = "From: \"".$nom."\"".$mail.$passage_ligne;
  // adresse de retour
  $ret = "Reply-to: \"".$nom."\"".$mail.$passage_ligne; 
  // version mime
  $mime = "MIME-Version: 1.0".$passage_ligne; 
  // content-type
  $content = "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;	
  // HEADER DU MAIL
  $header = $exp.$ret.$mime.$content;		
  return $header;
}	
// function MAIL PHP (format html)
function send_mail_html($mail_dest, $mail_exp, $sujet, $nom_exp, $msg_html)
{
  // initialisation
  $header = "";
  $contenu = "";	
  // création du header
  $header = header_mail($mail_dest, $mail_exp, $nom_exp);
  // Création du message.
  $contenu = message_mail_html($msg_html, $mail_dest);
  // Envoi du mail
  mail($mail_dest,$sujet,$contenu,$header);	
}

Re: Problème avec la fonction MAIL

Posté : 09 sept. 2011, 20:20
par jojolapine
Bonsoir,

Je n'ai pas regardé en détail, mais il y a quelque chose qui pourrait améliorer le tout...
Tu génères deux « boundary » différents (un dans la fonction qui crée les entêtes, et un dans celle qui crée le corps du message).
Or il me semble (à vérifier) que ces derniers doivent être strictement identiques dans le mail entier...

Essaye de changer ça, et dis nous si ça s'améliore :)

Re: Problème avec la fonction MAIL

Posté : 19 sept. 2011, 10:27
par nordine
A priori, il y a bien une erreur avec les boundary. En faisant comme tu as fait, je ne reçoit plus le mail en tant que spam mais je le reçois nrormalement, et les balises html sont bien interprétées. Par contre, je vois encore les caractéristiques du corps du message. Voici le mail reçu :

-------=a0443c8c8c3372d662e9173c18faaa2c Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: 8bit
Pour activer votre compte, cliquez sur le lien suivant : Activation
-------=a0443c8c8c3372d662e9173c18faaa2c--

Re: Problème avec la fonction MAIL

Posté : 19 sept. 2011, 10:54
par Mazarini
A priori, il y a bien une erreur avec les boundary. En faisant comme tu as fait, je ne reçoit plus le mail en tant que spam mais je le reçois nrormalement, et les balises html sont bien interprétées. Par contre, je vois encore les caractéristiques du corps du message. Voici le mail reçu :

-------=a0443c8c8c3372d662e9173c18faaa2c Content-Type: text/html; charset="ISO-8859-1" Content-Transfer-Encoding: 8bit
Pour activer votre compte, cliquez sur le lien suivant : Activation
-------=a0443c8c8c3372d662e9173c18faaa2c--
Il me semble qu'il manque -- à la fin du premier "boundary"

Je me demande si dans
$content = "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

il ne faut pas les "--" en fin.