mail avec contenu texte brut + HTML

mail avec contenu texte brut + HTML - PHP - Programmation

Marsh Posté le 30-10-2006 à 09:48:15    

bonjour
 
je dois envoyer des mails via une applications PHP
et il faudrait que le contenu soit en texte brut et en version HTML
 
je voudrais savoir comment je peux faire pour que une messagerie qui gère pas le HTML
lise automatiquement la version brut, et vice versa
 
ya des normes reconnues par les messageries  
par exemple  : la version HTML est dans un fichier texte avec un nom spécififique, et attaché au mail ?

Reply

Marsh Posté le 30-10-2006 à 09:48:15   

Reply

Marsh Posté le 30-10-2006 à 10:35:52    

Non, ils sont séparés par des boundary normaux, ils viennent tous comme ça dans le corps du mail en brut.

Reply

Marsh Posté le 30-10-2006 à 10:43:31    

ok merci
je viens de trouver un tuto qui a l'air de faire bien les choses :  
http://www.vulgarisation-informatique.com/mail.php
 
et un merci global, car j'ai constaté que c'est souvent toi qui répond a mes questions


Message édité par jokaritaff le 30-10-2006 à 10:44:54
Reply

Marsh Posté le 30-10-2006 à 10:45:48    

Voilà, c'est exactement ça.
 
Et de rien, c'est mon métier ;)

Reply

Marsh Posté le 31-10-2006 à 16:51:42    

Peut être pourrais-tu m'aider, je cherche désespérément à inclure des pièces jointes et de les inclure dans l'e-mail, mais cela ne marche pas.
 
J'ai pourtant suivi le tutoriel  
 
http://phpcodeur.net/articles/php/ [...] -embarques
 
et donner un identifiant unique à mes pièces jointes mais cela ne marche pas (sur Gmail par exemple)
 
C'est rageant car un simple mail en html depuis outlook express fonctionne bien !

Reply

Marsh Posté le 01-11-2006 à 01:08:12    

C'est quoi comme pièce jointe pour Gmail? Pas un .exe ou une .dtd par hasard?


Message édité par phosphoreloaded le 01-11-2006 à 01:09:05
Reply

Marsh Posté le 01-11-2006 à 14:39:06    

non je souhaite juste inclure des images jpg mais elles se mettent toujours à la fin de l'e-mail

Reply

Marsh Posté le 01-11-2006 à 14:57:32    

Pour include des images dans ton email, ne te prends pas la tête, fais les héberger et dans ton code HTML de l'email, tu mets <img src="http://monhebergement.com/monimage.jpg" alt..... />

Reply

Marsh Posté le 02-11-2006 à 10:05:06    

j'ai réussi a envoyer un mail avec texte brut  + html  + pieces jointes
Autant sous Outlook, Outlook express tout passe nickel
Autant sur des webmails comme celui de Free, le texte brut n'est pas affiché
et en piece jointe j'ai un fichier unnamed qui contient bien le texte en brut...mais j'aimerais qu'il affiche le contneu direct plutot que de passer par le fichier unnamed
 
-----------------------------------------
 
c bon j'ai résolu mon probleme. J'avais écrit le Contenet Transfert encoding avec 8 bits au lieu de 8 bit.
et yavé des tabulations qui étaient pas reconnues
 
--------------------------------------  
mon script d'envoi de mail se base sur PEAR Mail::Factory et permet donc d'envoyer :  
 
- du texte brut
- du texte html
- 1 ou n pieces jointes . par contre le Content-Type n'esty pas défini officiellement. Si vous voulez en mettre un vrai, ya le package PEAR Mail Mime.
- les mails sont tres bien gérés sur Outlook, outlook express et IMP
 
Si vous  avez des améliorations a apporter hésitez pas a les remonter
 
voici le code :

Code :
  1. include("Mail.php" );
  2. $eol = "\n";
  3. # File for Attachment
  4. # To Email Address
  5. $emailaddress= $objContact->getLbEmail();
  6. # Message Subject
  7. $emailsubject="Réponse à votre question sur ".$oThemeMsg->getLbThemeMsg();
  8. # Message Body
  9. $body= $objet->getTxtMessageHtml();
  10. $msg = "";
  11. # Common Headers
  12. $headers['From'] = 'lenom@lenom-france.org';
  13. $headers['Subject'] = $emailsubject;
  14. $headers["Date"] = date( "D, j M Y G:i:s O" );
  15. $headers["To"] = $objContact->getLbNom()." ".$objContact->getLbPrenom()." <".$objContact->getLbEmail().">";
  16. $headers["Reply-To"] = "noreply@lenom.fr";
  17. //$headers .= 'Reply-To: noreply@lenom.fr'.$eol;
  18. //$headers .= 'Return-Path: noreply@lenom.fr'.$eol;    // these two to set reply address
  19. $headers['Message-ID'] = "<".date(YmdHis)."lenom@".$_SERVER['SERVER_NAME'].">";
  20. $headers['X-Mailer'] = "PHP v".phpversion();          // These two to help avoid spam-filters
  21. # Boundry for marking the split & Multitype Headers
  22. $mime_boundary_texte="NextPart_001_".md5(time());
  23. $mime_boundary_PJ="NextPart_000_".md5(time());
  24. $headers['MIME-Version'] .= '1.0';
  25. //    if( $dir = @opendir($cible_dir)) {
  26. $headers['Content-Type'] .= "multipart/mixed;".$eol."\tboundary=\"----=_".$mime_boundary_PJ."\"";
  27. $msg .= "This is a multi-part message in MIME format".$eol.$eol;
  28. $msg .= "------=_".$mime_boundary_PJ.$eol;
  29. //    }
  30. $msg .= "Content-Type: multipart/alternative;".$eol."\tboundary=\"----=_".$mime_boundary_texte."\"".$eol.$eol.$eol;
  31. # Text Version
  32. $msg .= "------=_".$mime_boundary_texte.$eol;
  33. $msg .= "Content-Type: text/plain;".$eol."\tcharset=\"iso-8859-1\"".$eol;
  34. $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  35. $msg .= $eol.$emailsubject." :".$eol.$eol;
  36. $msg .= html_entity_decode($objet->getTxtMessage());
  37. $msg .= "\r\n\r\n-----"
  38.  ."\r\nPS : Vous ne pouvez pas répondre directement à ce message, pour y répondre, ou donner une note de satisfaction vous devez vous rendre à l'adresse suivante :"
  39.  . "\r\nhttp://".$_SERVER['HTTP_HOST']."/lenom/telethon.php?Page=Conversation_Contact&alea=" . $oConversation->getLbAlea()
  40.  ."\r\n----";
  41. $msg .= $eol.$eol;
  42. # HTML Version
  43. $msg .= "------=_".$mime_boundary_texte.$eol;
  44. $msg .= "Content-Type: text/html;".$eol."\tcharset=\"iso-8859-1\"".$eol;
  45. $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  46. $msg .='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'.$eol
  47. .'<html><head>'.$eol
  48. .'<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'.$eol
  49. .'</head>'.$eol
  50. .'<body>'.$eol;
  51. $msg .= $emailsubject." :<br /><br />";
  52. $msg .= $body;
  53. $msg .= "<br /><br />-----"
  54.  ."\r\nPS : Vous ne pouvez pas répondre directement à ce message, pour y répondre vous devez cliquer sur ce lien :"
  55.  . "\r\n<a href=\"http://".$_SERVER['HTTP_HOST']."/page.php">Ici</a>"
  56.  ."\r\n----";
  57. $msg .= '</body>'.$eol
  58.    .'</html>'
  59.    .$eol.$eol;
  60. $msg .= "------=_".$mime_boundary_texte."--".$eol.$eol;
  61. if( $dir = @opendir($cible_dir)) {
  62. while( FALSE !== ($fich = readdir($dir)) ) {
  63.  if ($fich != "." && $fich != ".." && $fich != "CVS" ) {
  64.   $letter = $fich;
  65.   $content_type = substr($letter, strlen($letter)-3, strlen($letter));
  66.   $f_name=$cible_dir.$letter;    // use relative path OR ELSE big headaches. $letter is my file for attaching.
  67.   $handle=fopen($f_name, 'rb');
  68.   $f_contents=fread($handle, filesize($f_name));
  69.   $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
  70.   $f_type=filetype($f_name);
  71.   fclose($handle);
  72.   # Attachment
  73.   $msg .= "------=_".$mime_boundary_PJ.$eol;
  74.   $msg .= "Content-Type: application/$content_type; name=\"".$letter."\"".$eol;  // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
  75.   $msg .= "Content-Transfer-Encoding: base64".$eol;
  76.   $msg .= "Content-Disposition: attachment; filename=\"".$letter."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
  77.   $msg .= $f_contents.$eol.$eol;
  78.   # Setup for text OR html
  79.   //$msg .= "Content-Type: multipart/alternative".$eol;
  80.  }
  81. }
  82. closedir($dir);
  83. # Finished
  84. }
  85. $msg .= "------=_".$mime_boundary_PJ."--".$eol.$eol;  // finish with two eol's for better security. see Injection.
  86. #PREPARE MAIL
  87. //ini_set(sendmail_from,'noreply@lenom.fr');  // the INI lines are to force the From Address to be used !
  88. # SEND THE EMAIL 
  89. // envoi du mail au contact
  90. $params["host"] = 'smtp.domaine.fr';
  91. $params["port"] = '25';
  92. $params["auth"] = false;
  93. $params["username"] = '';
  94. $params["password"] = '';
  95. $mail_object = Mail::factory("smtp", $params);
  96. $mail_object->send( $emailaddress, $headers, $msg);


 


Message édité par jokaritaff le 02-11-2006 à 10:31:47
Reply

Marsh Posté le 02-11-2006 à 10:32:54    

$fich != "CVS"  
---> dans mon projet, je travaille avec un outil de CVS
Donc si vous travaillez pas avec ce type d'outil, ya pas besoin de mettre cette condition

Reply

Marsh Posté le 02-11-2006 à 10:32:54   

Reply

Marsh Posté le 02-11-2006 à 15:14:52    

The-Shadow a écrit :

Pour include des images dans ton email, ne te prends pas la tête, fais les héberger et dans ton code HTML de l'email, tu mets <img src="http://monhebergement.com/monimage.jpg" alt..... />


 
Je pensais faire ça au début mais autant certains webmail que outlook 2003 par exemple bloquant les images externes. D'où un impact bien moindre sur les clients !

Reply

Marsh Posté le 03-11-2006 à 10:06:10    

Outlook bloque les images par défaut, mais peut les réafficher. D'où faire une page parfaitement accessible avec de beaux attributs alt sur les images [:dawa]

Reply

Marsh Posté le 03-11-2006 à 10:39:55    

A props d'accessiblité,  
il est par contre  malheureusement pas recommendé du tout de faire des mails en XHTML/CSS, car bien que la démarche soit bonne, la plupart des messageries ne le gèrent pas.
Toutefois je rejoins le propos de FlorentG sur l'accessiblité des attributs de balises HTML.

Reply

Sujets relatifs:

Leave a Replay

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