email multipart text et html...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : email multipart text et html...

par BeRoots » 14 févr. 2008, 16:15

pour ce qu'il en est des webmail (hotmail,orange,gmail...) j'ai remarquer pas mal de difference et en plus les feuille de style sont encore tres mal interpreté.
- chez orange, j'ai affichage du message mais en "code source" :?
- chez yahoo, j'ai le html :)
- chez google, j'ai le html sans les images :(
- pour les differents client de messagerie, j'ai affichage en html bien sur :)

si quelqu'un a une solution pour uniformiser mes résultats sur les webmails. vue que la priotité est en faite apparament sur la dernière partie de l'email (html ou text suivant ordonnancement).
j'aimerai donc faire en sorte de favoriser le html et en text si non suporter par le webmail... mais je comprend pas pourquoi orange m'interprete le code source complet sans les headers?

merci d'avance ;)

par Sékiltoyai » 11 févr. 2008, 18:01

ah ok…

par Hywan » 11 févr. 2008, 17:46

Normalement non. Tu as

Code : Tout sélectionner

Content-Disposition: attachment;
pour signaler que c'est une pièce jointe. Et de toute façon, les pièces jointes sont encodées en base64, pas de risque de confusion possible.

par Sékiltoyai » 11 févr. 2008, 17:41

Euh, un truc, si jamais on met une pièce jointe, ya pas un problème avec le multipart/alternative ?

par Hywan » 11 févr. 2008, 15:00

Ton problème m'a causé pas mal de soucis tu sais ;-).
Je me suis posé pas mal de questions et je pense avoir une réponse.

Pour avoir un mail avec plusieurs types de données (text, html etc.), il faut déclarer le content-type comme étant multi-partie et alternatif :

Code : Tout sélectionner

Content-Type: multipart/alternative;
suivi bien entendu de la frontière (Boundary="...")

Ensuite tu écris ta première frontière, suivi de :

Code : Tout sélectionner

Content-Type: text/plain;
(suivi accessoirement du charset — e.g. charset=utf-8 — et du format — e.g. format=flowed —), puis ton message.

Ensuite, tu écris une nouvelle fois ta frontière, puis le content-type en HTML :

Code : Tout sélectionner

Content-Type: text/html
et tout la tralala, suivi de ta page HTML.

Voici un exemple très rapide :

Code : Tout sélectionner

Subject: Testing Content-Type: multipart/alternative; boundary="------------000900020004060505060206" --------------000900020004060505060206 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hopla. --------------000900020004060505060206 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Un titre</title> <....> </head> <body> <p>Hopla.</p> </body> </html> --------------000900020004060505060206--
Maintenant que l'on a les deux contenus, il me semble que c'est à l'outil de messageries de faire le choix. Par défaut, il devrait choisir le meilleur rendu, soit HTML. Il devrait tous le faire, après je n'ai pas vérifié sur tous. Seulement sur Thunderbird, Mail et Outlook (98). Je nai pas testé sur les outils de messageries en ligne (Hotmail, Gmail et consort). Mais ce qui est pratiquement sûr, c'est que tu ne peux pas définir une préférence d'affichage. Si tu écris 2 contenus différents, c'est pour laisser à l'outil le choix. Donc je ne vois pas comment forcer un affichage plutôt qu'un autre, sauf si on en écrit qu'un seul des deux.

email multipart text et html...

par BeRoots » 07 févr. 2008, 12:42

salut à tous :)

j'ai revue mon system d'envoi de mail qui fonctionnait tres bien en mail html uniquement, afin d'y integrer quand même le choix entre html et text/plain...

j'ai essayé en faisant ainsi:
   // mise en forme du sujet de l'email
   $sujet_court = 'Test de votre adresse email';

   $boundary = md5(uniqid(microtime(), TRUE));

   // mise en variable de l'entête du mail de test
   $headers = "From: noreply@".$domaine."\n";
   $headers .= "To: ".$email."\n";
   $headers .= "Subject: ".$sujet_court."\n";
   $headers .= "Organization: http://".$_SERVER&#91;'HTTP_HOST'&#93;."\n";
   $headers .= "Date: ".date('r')."\n";
   $headers .= "X-priority: 1\n";
   $headers .= "X-Mailer: PHP/".phpversion()."\n";
   $headers .= "MIME-Version: 1.0\n";
   $headers .= "Content-Transfer-Encoding: 8bit\n";
   $headers .= 'Content-Type: multipart/mixed;  charset=\"iso-8859-15\"; boundary='.$boundary."\n";

   // mise en forme de l'email au format texte
   $email_contenu = "Test de r&eacute;ception des emails du site ".$_SERVER['HTTP_HOST']."\n";
   $email_contenu .= "Test r&eacute;ussi avec succ&egrave;s\n";
   $email_contenu .= "Vous pouvez poursuivre la proc&eacute;dure d&rsquo;inscription sur le site\n";
   $email_contenu .= "Ps. l&rsquo;adresse email d&rsquo;expedition de ce message n&rsquo;est pas valide et ne peut en aucun cas servir d&rsquo;adresse de reponse.\n";
   // mise en forme de l'email au format html
   $email_contenu .= '--'.$boundary."\n";
   $email_contenu .= "Content-Type: text/html; charset=\"iso-8859-15\"\n";
   include("includes/email_proformat.php");
   $email_contenu .= $email_head."\n";
   $email_contenu .= "         <p class=\"titre\"><b>Test</b> de r&eacute;ception des emails du site ".$_SERVER['HTTP_HOST']."</p>\n";
   $email_contenu .= "         <p class=\"sous_titre\">Test r&eacute;ussi avec succ&egrave;s</p>\n";
   $email_contenu .= "         <p class=\"center\">Vous pouvez poursuivre la proc&eacute;dure d&rsquo;inscription sur le site</p>\n";
   $email_contenu .= "         <p class=\"small\"><br />Ps. l&rsquo;adresse email d&rsquo;expedition de ce message n&rsquo;est pas valide et ne peut en aucun cas servir d&rsquo;adresse de reponse.</p>\n";
   $email_contenu .= $email_foot."\n";
   // fin de l'email
   $email_contenu .= '--'.$boundary."\n";

   // envoie du mail de test
   $send_email = @mail($email, $sujet_court, $email_contenu, $headers);
je souhaite faire en sorte que cette email propose par preference la version html et si celle-ci n'est pas utilisable, la version texte. sur les clients mail (soft), le mail est bien en html, mais chez les different webmail (google,yahoo,orange) j'ai des problemes... mon email est chez google la version html mais sans les images, chez orange j'ai les deux partie d'afficher mais comme le code source de l'email sans les headers...

quelqu'un peut il me dire comment faire pour avoir la version texte quand le html ne passe pas, et la version html quand possible, et ce pour tout type de client mail et webmail?