Envoyer un mail au format HTML

Envoyer un mail au format HTML - PHP - Programmation

Marsh Posté le 15-07-2003 à 03:08:14    

Bonjour,
j'utilise la fonction  mail() de php qui a l'air de fonctionner tres bien, jme demandait si c'etait possible d'envoyer le mail au format HTML ...
 
si vous savez comment on fait je vous en remercis;
 
 
 
 
jerry

Reply

Marsh Posté le 15-07-2003 à 03:08:14   

Reply

Marsh Posté le 15-07-2003 à 03:18:06    

Oui, suffit d'indiquer le type "MIME" dans les headers, et tu mets ton code html dans le corps, normal ;)
 
plus d'infos dans les exemples de la fonction mail() sur php.net

Reply

Marsh Posté le 17-07-2003 à 15:29:14    

Skylight a écrit :

Oui, suffit d'indiquer le type "MIME" dans les headers, et tu mets ton code html dans le corps, normal ;)
 
plus d'infos dans les exemples de la fonction mail() sur php.net


merci bien je essaye ca des que le net sera retabli chez moi :cry:

Reply

Marsh Posté le 17-07-2003 à 16:00:22    

veryfree a écrit :


merci bien je essaye ca des que le net sera retabli chez moi :cry:

Toi aussi victime du dégroupage free ? :D
 
(15 jours que je suis dégroupé, 6 jours de connexion effective)

Reply

Marsh Posté le 19-07-2003 à 16:09:58    

Skylight a écrit :

Toi aussi victime du dégroupage free ? :D
 
(15 jours que je suis dégroupé, 6 jours de connexion effective)


 
3 mois que je suis chez eux, j avait eu aucun probleme et la ca fait 4 jours :cry:
 
je suis ds un cyber café  :sweat:  
 

Reply

Marsh Posté le 19-07-2003 à 17:03:16    

veryfree a écrit :


 
3 mois que je suis chez eux, j avait eu aucun probleme et la ca fait 4 jours :cry:
 
je suis ds un cyber café  :sweat:  
 
 

Ce mois ci, ils ont pas mal de problème chez free, entre les coupures de courants, le matos qui crève, les mise a jour d'une grande partie de leur matos et autres parties du genre. On peut pas dire que ca soit un mois sans problème pour eux. ;)
Mais bon, au moins on voit qu'ils bossent les technitiens de free.
 
Pour la question initiale, il me semble que c'est exactement comme pour un mail normal a part que le contenu du mail n'est pas du texte seul mais une page html normale.

Reply

Marsh Posté le 19-07-2003 à 17:08:26    

omega2 a écrit :

*
 
Pour la question initiale, il me semble que c'est exactement comme pour un mail normal a part que le contenu du mail n'est pas du texte seul mais une page html normale.

Oui, mais il faut aussi modifier l'entete pour indiquer le type "MIME"

Reply

Marsh Posté le 21-07-2003 à 11:44:17    

http://www.cru.fr/JRES95/actes/tutoriaux/mime.html
 
 :)  
 
 
Si tu veux pas te prendre la tête, moi j'ai fait ça :
(c'est ptetre pas super mega genial preatique.. mais bon ça marche tres bien..)

Code :
  1. //
  2. //Envoi un email en html, avec possibilité d'y attacher un fichier.
  3. //
  4. function send_mail($to, $sujet, $message, $from, $fichier = null, $typemime = null, $nom = null, $reply = null, $date = true)
  5. {
  6.  //Pour le type mime de l'attachement :
  7.  //
  8.  //pour un message :
  9.  // message/rfc822
  10.  // message/partial
  11.  // message/external-body
  12.  //Text :
  13.  // text/plain
  14.  // text/richtext
  15.  //Image :
  16.  // image/gif
  17.  // image/jpeg
  18.  //Audio :
  19.  // audio/basic
  20.  //Video :
  21.  // video/mpeg
  22.  //Application :
  23.  // application/octet-stream
  24.  // application/postscript
  25.  $reply  = $reply?$reply:$from;
  26.  $typemime = $typemime?$typemime:"image/jpeg";
  27.  $nom  = $nom?$nom:"fichier";
  28.  $date  = $date?date("l j F Y, G:i" ):"0 0 0 0, 0:0";
  29.  //génére un identifiant unique de 32 caractères (32 caractères je crois..) (voir nexen, arf)
  30.  $lim1 = "_parties_".md5(uniqid(rand()));
  31.  $lim2 = "_parties_".md5(uniqid(rand()));
  32.  //message en texte bidon pour les navigateurs qui n'acceptent pas le HTML
  33.  $texte_simple =
  34.  "This is a multi-part message in MIME format.\n\n".
  35.  "------=$lim1\n".
  36.  "Content-Type: multipart/alternative;\n".
  37.  "\tboundary=\"----=$lim2\"\n\n".
  38.  "------=$lim2\n".
  39.  "Content-Type: text/plain; \tcharset=\"US-ASCII\"\n".
  40.  "Content-Transfer-Encoding: quoted-printable\n\n".
  41.  strip_tags(eregi_replace("<br />", "\n",$message))."\n\n";
  42.  //message en html original
  43.  $texte_html =
  44.  "------=$lim2\n".
  45.  "Content-Type: text/html; charset=\"US-ASCII\"\n".
  46.  "Content-Transfer-Encoding: quoted-printeble\n\n".
  47.  $message."\n\n\n------=$lim2--\n";
  48.  //attachement du message
  49.  if($fichier)
  50.  {
  51.   $f   = fopen($fichier,"r" );
  52.   $contenu = fread($f,filesize($fichier));
  53.   fclose($f);
  54.   //formatte les données pour suivre la norme RFC 2045 (voir nexen aussi)
  55.   $contenu = chunk_split(base64_encode($contenu));
  56.   $attachement =
  57.   "------=$lim1\n".
  58.   "Content-Type: $typemime; name=\"$nom\"\n".
  59.   "Content-Transfer-Encoding: base64\n".
  60.   "Content-Disposition: attachment; filename=\"$nom\"\n\n$contenu\n\n\n------=$lim1\n";
  61.  }
  62.  else
  63.   $attachement = "";
  64.  //fin du message
  65.  $mail_mime =
  66.  "Date: $date\n".
  67.  "MIME-Version: 1.0\n".
  68.  "Content-Type: multipart/mixed;\n".
  69.  " boundary=\"----=$lim1\"\n\n";
  70.  return @mail($to,$sujet,$texte_simple.$texte_html.$attachement,"Reply-to: $reply\nFrom: $from\n".$mail_mime);
  71. }


---------------
yvele n'est plus.
Reply

Marsh Posté le 21-07-2003 à 12:37:33    

merci pour vos reponses :)
 
jdoit choisir quel type mime dans ceux la :
 
//Pour le type mime de l'attachement :
      //
      //pour un message :
      // message/rfc822
      // message/partial
      // message/external-body
      //Text :
      // text/plain
      // text/richtext
 

Reply

Marsh Posté le 21-07-2003 à 12:53:30    

moi j'envoie avec "text/plain" ET "text/html"
 
edit: voir ma fonction  :)  
edit2: désolé pour les commentaires qui trainent.. c'est juste pour l'attachement ça! donc ça depend du type que tu veux attacher


Message édité par Mr yvele le 22-07-2003 à 10:02:52

---------------
yvele n'est plus.
Reply

Marsh Posté le 21-07-2003 à 12:53:30   

Reply

Marsh Posté le 21-07-2003 à 19:53:34    

Mr yvele a écrit :

moi j'envoie avec "text/plain"
 
edit: voir ma fonction  :)  
edit2: désolé pour les commentaires qui trainent.. c'est juste pour l'attachement ça! donc ça depend du type que tu veux attacher


 
pour le HTML donc, j ai bien regardé ta fonction mais chui un peu perdu la :D

Reply

Marsh Posté le 22-07-2003 à 10:01:05    

Voila, lol désolé.. jme suis rendu compte que j'avais ajouté quelques feature (de merde) à cette fonction..
du cuop je l'ai epuré, ça donne ça :
 
donc c'est juste pour envoyer un mail en html.. sans attachements..  :)  
 

Code :
  1. //
  2. //Envoi un email en html
  3. //
  4. function send_mail($to, $sujet, $message, $from, $reply = null)
  5. {
  6.  $reply  = $reply?$reply:$from;
  7.  $date  = date("l j F Y, G:i" );
  8.  //génére un identifiant unique de 32 caractères (32 caractères je crois..) (voir nexen, arf)
  9.  $lim1 = "_parties_".md5(uniqid(rand()));
  10.  $lim2 = "_parties_".md5(uniqid(rand()));
  11.  //message en texte bidon pour les navigateurs qui n'acceptent pas le HTML
  12.  $texte_simple =
  13.  "This is a multi-part message in MIME format.\n\n".
  14.  "------=$lim1\n".
  15.  "Content-Type: multipart/alternative;\n".
  16.  "\tboundary=\"----=$lim2\"\n\n".
  17.  "------=$lim2\n".
  18.  "Content-Type: text/plain; \tcharset=\"US-ASCII\"\n".
  19.  "Content-Transfer-Encoding: quoted-printable\n\n".
  20.  strip_tags(eregi_replace("<br />", "\n",$message))."\n\n";
  21.  //message en html original
  22.  $texte_html =
  23.  "------=$lim2\n".
  24.  "Content-Type: text/html; charset=\"US-ASCII\"\n".
  25.  "Content-Transfer-Encoding: quoted-printeble\n\n".
  26.  $message."\n\n\n------=$lim2--\n";
  27.  //fin du message
  28.  $mail_mime =
  29.  "Date: $date\n".
  30.  "MIME-Version: 1.0\n".
  31.  "Content-Type: multipart/mixed;\n".
  32.  " boundary=\"----=$lim1\"\n\n";
  33.  return @mail($to,$sujet,$texte_simple.$texte_html,"Reply-to: $reply\nFrom: $from\n".$mail_mime);
  34. }


Message édité par Mr yvele le 22-07-2003 à 13:46:06

---------------
yvele n'est plus.
Reply

Marsh Posté le 22-07-2003 à 10:04:32    

text/plain pour le texte bidon..
text/html pour le html
 
et tu peux envoyer les deux en meme temps dans le meme mail.. comme ça si le logiciel qui ouvre le mail ne comprend pas le text/html, ben il pourra se tourner vers le text/plain
 :)


---------------
yvele n'est plus.
Reply

Marsh Posté le 22-07-2003 à 13:12:16    

merci bien c plus clair a present :jap:

Reply

Marsh Posté le 22-07-2003 à 13:46:57    

Vraiment désolé, il y avais une petite merde dans la fonction :
 
$date = date("l j F Y, G:i" ):"0 0 0 0, 0:0";
 
mais la j'ai édité!  :)


---------------
yvele n'est plus.
Reply

Marsh Posté le 11-08-2003 à 17:14:49    

merci a vous tous pour votre aide, maintenant que j ai le net a la maison, j ai pu faire mes tests, j ai fait ca :
 

Code :
  1. <?
  2. $email="exp@exe.org";
  3. $entetedate  = date("D, j M Y H:i:s -0600" ); // Offset horaire
  4. $entetemail  = "From: $email \n"; // Adresse expéditeur
  5. $entetemail .= "Cc: \n";
  6. $entetemail .= "Bcc: \n"; // Copies cachées
  7. $entetemail .= "Content-Type: text/html";
  8. $entetemail .= "Reply-To: $email "; // Adresse de retour
  9. $entetemail .= "Date: $entetedate"; 
  10. $message="<html><body><p>hello world</p></body></html>";
  11. @mail("very.free@free.fr","hello world", $message,$entetemail);
  12. ?>


le mail est tj envoyé sous forme de texte brut ...


Message édité par veryfree le 11-08-2003 à 17:19:59
Reply

Marsh Posté le 11-08-2003 à 17:37:27    

yo people  :hello:  
 
il y a une classe qui prend en charge les headers suivant le type de mail ... pieces attachées etc .....et fonctionne plutôt pas mal
 
http://phpmailer.sourceforge.net/
 
moi c'est ce que j'utilise ..  :sol:  
ca ne t'empeche pas de te pencher sur les histoires d'entêtes ... c'est plus sympa de comprendre  [:troa]  
 
(exemples d'utilisation sur le site et fourni avec le package je crois :ange: )


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-08-2003 à 18:28:06    

simogeo a écrit :

yo people  :hello:  
 
il y a une classe qui prend en charge les headers suivant le type de mail ... pieces attachées etc .....et fonctionne plutôt pas mal
 
http://phpmailer.sourceforge.net/
 
moi c'est ce que j'utilise ..  :sol:  
ca ne t'empeche pas de te pencher sur les histoires d'entêtes ... c'est plus sympa de comprendre  [:troa]  
 
(exemples d'utilisation sur le site et fourni avec le package je crois :ange: )


 
jvien de voir en effet ca a l air pas mal
mais j aimerait qd meme resoudre mon probleme sans avoir a utiliser une lib externe d'autant que je veux garder du code leger pq le serveur soxxor pas mal :/

Reply

Marsh Posté le 11-08-2003 à 21:05:01    


 

Code :
  1. <?
  2. error_reporting(E_ALL);
  3. $email="exp@exe.org";
  4. $entetedate  = date("D, j M Y H:i:s -0600" ); // Offset horaire
  5. $entetemail  = "MIME-Version: 1.0\n";
  6. $entetemail .= "Content-type: text/html; charset=iso-8859-1\n";
  7. $entetemail .= "From: $email \n"; // Adresse expéditeur
  8. $entetemail .= "Reply-To: $email\n"; // Adresse de retour
  9. $entetemail .= "Date: $entetedate\n"; 
  10. $message="<html><body><p>hello world</p></body></html>";
  11. mail("very.free@free.fr","hello world", $message,$entetemail);
  12. ?>


 
et comme ça ?
j'ai aussi viré @ devant email... si ca ne fonctionne pas ... postes ton message d'erreur pour qu'on te file un coup de main  ;)  


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-08-2003 à 21:55:37    

simogeo a écrit :


 

Code :
  1. <?
  2. error_reporting(E_ALL);
  3. $email="exp@exe.org";
  4. $entetedate  = date("D, j M Y H:i:s -0600" ); // Offset horaire
  5. $entetemail  = "MIME-Version: 1.0\n";
  6. $entetemail .= "Content-type: text/html; charset=iso-8859-1\n";
  7. $entetemail .= "From: $email \n"; // Adresse expéditeur
  8. $entetemail .= "Reply-To: $email\n"; // Adresse de retour
  9. $entetemail .= "Date: $entetedate\n"; 
  10. $message="<html><body><p>hello world</p></body></html>";
  11. mail("very.free@free.fr","hello world", $message,$entetemail);
  12. ?>


 
et comme ça ?
j'ai aussi viré @ devant email... si ca ne fonctionne pas ... postes ton message d'erreur pour qu'on te file un coup de main  ;)  
 


ben en fait y a pas de message d erreur, le mail arrive ( il met 30 min mais il arrive :D )
 
c'est juste que les balises html ne sont pas interpertés :/


Message édité par veryfree le 11-08-2003 à 21:56:27
Reply

Marsh Posté le 11-08-2003 à 22:46:47    

veryfree a écrit :


ben en fait y a pas de message d erreur, le mail arrive ( il met 30 min mais il arrive :D )
 
c'est juste que les balises html ne sont pas interpertés :/


sur une webmail ? sur un client de messagerie ?  :heink:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-08-2003 à 23:08:03    

simogeo a écrit :


sur une webmail ? sur un client de messagerie ?  :heink:  


 
c sur imp.free.fr
 
un webmail quoi

Reply

Marsh Posté le 11-08-2003 à 23:45:29    

veryfree a écrit :


 
c sur imp.free.fr
 
un webmail quoi


ben il est peut-etre tout simplement pas configuré pour interpréter le html  [:spamafote]  
 
essayes avec une autre adresse de destination ou avec un client de messagerie ou revoit la config de ton webmail  [:troa]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-08-2003 à 23:49:10    

simogeo a écrit :


ben il est peut-etre tout simplement pas configuré pour interpréter le html  [:spamafote]  
 
essayes avec une autre adresse de destination ou avec un client de messagerie ou revoit la config de ton webmail  [:troa]  


 
jvai voir ca :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed