pb avec fonction mail

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 02:30

Salut à tous
J'utilise la fonction mail et tout se passe relativement bien.
Je m'explique. mes mails sont bien envoyés en format html, aux bons destinataires, avec les bons contenus. Suis donc très content :D
Un hic cependant (bah oui !) : mes mails 'affichent très bien sur des logiciels de messageries tels que Outlook, Mail, Thunderbird, etc...
Par contre, dès que je cherche à les lire sur des serveur de messagerie type yahoo en me connectant depuis leur site, là, c'est le drame ! J'ai des trucs du genre
<html><body><table width='550' border='0' cellspacing='0' cellpadding='5'
style='border-color:#CC6600; border-width:1 ;border-style:solid'><tr><td
width='100%'><br><br><br><font color='#000000' size='-1' face='verdana'>Bonjour </I>BLABLABLA</font></B></tr></td></table></body></html>
En d'autres termes, vous l'aurez compris, le code html est compris comme étant du texte et n'est pas interprété...

y aurait-il une solution pour éviter ça ?

Merci de vos réponses :)

A +

Mammouth du PHP | 985 Messages

03 sept. 2009, 07:49

C'est à cause de certains abus...
Et donc oui html et javascript sont souvent désactivés par mesure de sécurité, seule solution à mon sens, c'est de ne pas utiliser html dans les mails...
Tout en sachant que les utilisateurs peuvent toujours autoriser manuellement html dans un mail.
Donc peut-être en le présisant au début du mail...

[EDIT]
Ou plus fun peut-être:
Filtrer les adresses mails (Yahoo et hotmail...), avec une fonction preg_match() et donc envoyer soit un mail en version html soit un mail version non html...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

03 sept. 2009, 08:39

Salut,
Salut à tous
J'utilise la fonction mail et tout se passe relativement bien.
Je m'explique. mes mails sont bien envoyés en format html, aux bons destinataires, avec les bons contenus. Suis donc très content :D
Un hic cependant (bah oui !) : mes mails 'affichent très bien sur des logiciels de messageries tels que Outlook, Mail, Thunderbird, etc...
Par contre, dès que je cherche à les lire sur des serveur de messagerie type yahoo en me connectant depuis leur site, là, c'est le drame ! J'ai des trucs du genre
<html><body><table width='550' border='0' cellspacing='0' cellpadding='5'
style='border-color:#CC6600; border-width:1 ;border-style:solid'><tr><td
width='100%'><br><br><br><font color='#000000' size='-1' face='verdana'>Bonjour </I>BLABLABLA</font></B></tr></td></table></body></html>
En d'autres termes, vous l'aurez compris, le code html est compris comme étant du texte et n'est pas interprété...
y aurait-il une solution pour éviter ça ?
Merci de vos réponses :)
A +
As-tu bien indiqué : Content-type multipart/alternative; boundary... ?

@+ ;)

Mammouth du PHP | 985 Messages

03 sept. 2009, 08:59

As-tu bien indiqué : Content-type multipart/alternative; boundary... ?
Effectivement, c'est déjà mieux de commencer ainsi, cela te permet d'envoyer dans un même mail, deux versions: une version html et une version texte...
Et ensuite éventuellement filtrer les adresses mails, si cela n'affiche pas le résultat voulu sur certaines messageries...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 10:09

Hello Dr@ke et FuZZyLine !
Merci de ces échanges... :) Non, je n'ai pas utilisé Content-type multipart/arternative;
Est-ce que vous pourriez me donner la syntaxe précise ? (bon sinon, je peux chercher, mais si vous l'avez directement en tête...)

Mammouth du PHP | 985 Messages

03 sept. 2009, 10:19

Comme disait mon Prof: "Google est ton ami" :wink:
Ensuite Post ton code si problème...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

03 sept. 2009, 12:45

Hello Dr@ke et FuZZyLine !
Merci de ces échanges... :) Non, je n'ai pas utilisé Content-type multipart/arternative;
Est-ce que vous pourriez me donner la syntaxe précise ? (bon sinon, je peux chercher, mais si vous l'avez directement en tête...)
$separator = '-----=' . md5(uniqid(mt_rand())); 
Content-Type: multipart/alternative; boundary = $separator
Je te conseille la lecture de cette page: http://www.vulgarisation-informatique.com/mail.php
j'y ai fais mes classes... (J. de M.) ;)

@+ ;)

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 13:12

ok merci les gars !
Je m'y colle cette aprèm :)
Je vous tiens au jus en cas de pb...

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 19:57

Hello les gars
bon alors j'ai fait comme il fallait !
Mais :((
ca marche pô !

J'ai ça comme message sur le serveur :
Email Parsing failed. The selected email cannot be parsed since the email is corrupt. Please ask the sender to send the email again using another program or method. MIME message decoding error: incomplete message body part
et sur mon serveur de messagerie :
This is a multi-part message in MIME format.

-------=9af5ec8c49080de78a83ae9d2d103331--
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit



Bonjour
BLABLABLA

CECI EST UN TEST


-------=9af5ec8c49080de78a83ae9d2d103331--
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

<html><body><table width='550' border='0' cellspacing='0' cellpadding='5' style='border-color:#CC6600; border-width:1 ;border-style:solid'><tr><td width='100%'><a href='http://www.monsite.com'><IMG SRC='http://www.monsite.com/images.gif'></a> ... ><br><font color='#000000' size='-1' face='verdana'>Bonjour </I><br clear='all'><br clear='all'>BLABLABLA

CECI EST UN TEST

</font></B></tr></td></table></body></html>

-------=9af5ec8c49080de78a83ae9d2d103331--

Voilà voilà...
#-o

Mammouth du PHP | 985 Messages

03 sept. 2009, 20:16

L'exemple sur l'adresse que Fuzzy t'a donné:
<?php
     //-----------------------------------------------
     //DECLARE LES VARIABLES
     //-----------------------------------------------

     $destinataire='[email protected]';
     $email_expediteur='[email protected]';
     $email_reply='[email protected]';

     $message_texte='Bonjour,'."\n\n".'Voici un message au format texte'; 
     $message_html='<html>
     <head>
     <title>Titre</title>
     </head>
     <body>Test de message</body>
     </html>';

     //-----------------------------------------------
     //GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
     //-----------------------------------------------

     $frontiere = '-----=' . md5(uniqid(mt_rand()));

     //-----------------------------------------------
     //HEADERS DU MAIL
     //-----------------------------------------------

     $headers = 'From: "Nom" <'.$email_expediteur.'>'."\n";
     $headers .= 'Return-Path: <'.$email_reply.'>'."\n";
     $headers .= 'MIME-Version: 1.0'."\n";
     $headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';

     //-----------------------------------------------
     //MESSAGE TEXTE
     //-----------------------------------------------
     $message = 'This is a multi-part message in MIME format.'."\n\n";

     $message .= '--'.$frontiere.'--'."\n";
     $message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
     $message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
     $message .= $message_texte."\n\n";

     //-----------------------------------------------
     //MESSAGE HTML
     //-----------------------------------------------
     $message .= '--'.$frontiere.'--'."\n";
     $message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
     $message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
     $message .= $message_html."\n\n";

     $message .= '--'.$frontiere.'--'."\n";

     if(mail($destinataire,$sujet,$message,$headers))
     {
          echo 'Le mail a été envoyé';
     }
     else
     {
          echo 'Le mail n\'a pu être envoyé';
     }
?> 
Dedans les variables expéditeur et destinataire:
     $destinataire='[email protected]';
     $email_expediteur='[email protected]';
     $email_reply='[email protected]';
Dedans aussi, les variables message html et message texte:
$message_texte='Bonjour,'."\n\n".'Voici un message au format texte';
     $message_html='<html>
     <head>
     <title>Titre</title>
     </head>
     <body>Test de message</body>
     </html>';
Remplace les par les tiennes, test et ensuite adapte avec ton script suivant l'exemple :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 20:56

Bon... ok... je vais tenter ça !
Je pourrai pas avant demain alors je vous tiens au courant !

Eléphanteau du PHP | 45 Messages

03 sept. 2009, 21:17

J'ai pris 2 minutes pour tenter...
Exactement le même résultat #-o
Je peux vous envoyer le code, mais en fait, ça changerait rien, j'ai fait un "copier collé" du code que vous m'avez envoyé...
En fait j'ai envie de dire que ce code ne fonctionne pas avec tous les serveurs de messagerie...
ce qui ne m'arrange pas mes affaires !

Mammouth du PHP | 985 Messages

03 sept. 2009, 23:19

J'en sais rien, personnellement je n'ai jamais testé: multipart/alternative; boundary et encore moins le script de l'adresse donné... Et je n'ai pas le temps de tester pour le moment.
Fuzzy semblait dire que cela fonctionnait, il va surement te répondre...
Sinon te reste la solution que j'évoquais dans mon premier Post.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

04 sept. 2009, 09:01

Salut,
J'ai pris 2 minutes pour tenter...
Exactement le même résultat #-o
Je peux vous envoyer le code, mais en fait, ça changerait rien, j'ai fait un "copier collé" du code que vous m'avez envoyé...
En fait j'ai envie de dire que ce code ne fonctionne pas avec tous les serveurs de messagerie...
ce qui ne m'arrange pas mes affaires !
L'url donnée te permet de faire tout ce que tu souhaites faire (en tout cas dans ton premier message).
Ce peut que "2" minutes n'ont pas été suffisantes. 'fin... pour moi c'était pas le cas.
Autrement, si tu ne fais que du copié/colller sans apréhender le mécanisme, je ne peux t'aider plus.
Regarde bien, lis, apréhende le sujet. Assimiler le sujet passe souvent par des essais foireux...
(je sais de quoi je parle).

Ceci dit, sans offense, c'est ma façon de voir. Je pourrais encore (tenter) de t'aider mais sur un
problème précis, une demande explicite. La, ca devient trop large. A ta question primaire, je pense avoir
répondu... Même si d'autres zones d'ombres apparaissent.

Quelque points à prendre en considération: (simple rappel)

Ne pas confondre \n et \r\n
S'assurer que les doubles "\n" sont bien présents et que ceux-ci sont bien placés.
S'arrurer d'un code de caractère convenable (7bts vs 8Bits, etc...)

Essaie l'envoie de ton mail avec juste, dans la partie body-html un espace et c'est tout,
c'est peut-être juste ton message qu'il n'aime pas.

Voila, désolé ne pas en dire plus mais c'est tout ce que je peux à l'heure présente.

@+ bon code ;)

EDIT: J'ai peut-être été un peu sec lol désolé. Petite info en sus. Tu as la lib phpmailer qui existe et
facilite grandement la vie: http://phpmailer.worxware.com/ au cas ou, on sait jamais ;)

Eléphanteau du PHP | 45 Messages

04 sept. 2009, 13:08

Hello FuZZyLine
T'inquiète pas. No problem ! J'étais un peu désespéré hier parce que je suis assez laborieux en programmation, et du coup ce qui devrait prendre 15 minutes me prend souvent 1 heure et là ça fait 15 jours que je cherche à améliorer certaines fonctionnalités de mon site et je dois avouer que, à cette dernière étape de la programmation, j'ai hâte de voir la ligne d'arrivée !
Mais bon... je resterai tenace...
L'url donnée te permet de faire tout ce que tu souhaites faire
C'est bien ça qui me rassure.

Je vais y aller par étape et voir ce qui se passe...

Je te tiens au courant

a +