Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2011, 09h49   #1
Invité de passage
 
Inscription : mars 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 10
Points : 1
Points : 1
Par défaut Balises HTML non interprétées dans le mail php

Bonjour,

J'envoie un mail en PHP au format HTML et malheureuseuement les balises HTML ne sont interprétées que pour des messages à destination de GMAIL. Pour des adresses FREE et HOTMAIL, les balises HTML ne sont pas interprétés.

Voici mon code source pour l'envoi des mails :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
// function MAIL PHP (format html)
function send_mail_html($mail_dest, $mail_exp, $sujet, $msg_html)
{
   // initialisation
   $header = "";
   $contenu = "";
 
   $passage_ligne = PHP_EOL;
 
   // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
   $header = 'MIME-Version: 1.0' .$passage_ligne;
   $header .= 'Content-type: text/html; charset=iso-8859-1' .$passage_ligne;
 
   // En-têtes additionnels
   $header .= $mail_dest.$passage_ligne;
   $header .= $mail_exp.$passage_ligne;
 
   // Création du message.
  $contenu = $msg_html;
 
  // Envoi du mail
  mail($mail_dest,$sujet,$contenu,$header);	
}
nordine14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 10h05   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
ton entête n'est pas bonne, ou sont les To ? et From ?
je te déconseil d’utiliser PHP_EOL (d’ailleurs aucun intérêt de la mettre dans un variable plus longue ???), utilise "\r\n"
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 10h14   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Tu devrais utilisé une lib dédiée à l'envoie des mail en html plutot que de manipuler tes headers à la main.

Ex:
http://framework.zend.com/manual/1.1...tml-mails.html
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 11h10   #4
Invité de passage
 
Inscription : mars 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 10
Points : 1
Points : 1
Bonjour stealth35,

J'ai cru comprendre que pour certains clients SMTP le '\r\n' était mal interprété et qu'il falait utilisé plutôt '\n'. Comment savoir si je dois utiliser '\n' ou '\r\n' selon l'adresse du destinataire (hotmail, free, ....)

C'est la raison pour laquelle j'ai utilisé PHP_EOL.
nordine14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 11h19   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par nordine14 Voir le message
Bonjour stealth35,

J'ai cru comprendre que pour certains clients SMTP le '\r\n' était mal interprété et qu'il falait utilisé plutôt '\n'. Comment savoir si je dois utiliser '\n' ou '\r\n' selon l'adresse du destinataire (hotmail, free, ....)

C'est la raison pour laquelle j'ai utilisé PHP_EOL.
\r\n est le standard

pour toi a quoi correspond PHP_EOL ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 14h16   #6
Invité de passage
 
Inscription : mars 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 10
Points : 1
Points : 1
J'ai finalement modifier mon code après avoir lu plusieurs tuto. Maintenant je n'ai plus de soucis par contre je vois les entêtes dans le mail.

Voici le résultat du mail :

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

Voici le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
// fonction d'affichage du retour à la ligne
function affichage_correct($mail)
{
   if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail))
   {
       $passage_ligne = "\r\n";
   }
   else
   {
      $passage_ligne = "\n";
   }
 
   return $passage_ligne;
}
 
//fonction header HTML
function header_mail_html($mail_dest, $mail, $boundary)
{
   // initialisation
   $passage_ligne = "";
   $mime = "";
   $content = "";
   $header = "";
 
   // retour à la ligne
   $passage_ligne = affichage_correct($mail_dest);
 
   // 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 = $mime.$content;
 
   return $header;
}
 
// fonction message (format html)
function message_mail_html($message_html, $message_txt, $mail_dest, $boundary)
{
   // initialisation
   $message = "";
 
   // retour à la ligne
   $passage_ligne = affichage_correct($mail_dest);
 
   // MESSAGE DU MAIL
   $message = $passage_ligne."--".$boundary."--".$passage_ligne;
   $message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
   $message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
   $message.= $passage_ligne.$message_txt.$passage_ligne;
   $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;
}	
 
// function MAIL PHP (format html)
function send_mail_html($mail_dest, $mail_exp, $sujet, $msg_html, $msg_txt)
{
   // initialisation
   $header = "";
   $contenu = "";
   // boundary utile pour le content type
   $boundary = "-----=".md5(rand());
 
   // création du header
   $header = header_mail_html($mail_dest, $mail_exp, $boundary);
 
   // Création du message.
   $contenu = message_mail_html($msg_html, $msg_txt, $mail_dest, $boundary);
 
   // Envoi du mail
   mail($mail_dest,$sujet,$contenu,$header);	
}
nordine14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h26   #7
Invité de passage
 
Inscription : mars 2011
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 10
Points : 1
Points : 1
Par défaut Bonjour,

en fait j'ai résolu mon problème. Faut pas me prendre la tête avec cette histoire de boundary.
nordine14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h24.


 
 
 
 
Partenaires

Hébergement Web