Email par php (et oui, encore !)

devlop78
Invité n'ayant pas de compte PHPfrance

07 oct. 2010, 16:01

Bonjour à tous,

Je sais ... encore un ! Et franchement, la prochaine fois, bien que là ce fut rapide à mettre en place, j'utiliserai une librairie telle que PEAR Mail, car je trouve que le monde du mail c'est spécial ... entre les encodages, les boundary, etc ... surtout à la lecture. Bref.

J'ai un formulaire qui envoie un message en text/plain + 0 à 2 pièces jointes. J'ai testé avec 0, 1 et 2 pièces jointes, en lisant avec Thunderbird, et une solution client mail de OVH (vous savez le sorte d'écureuil, son concurrent ...), et bon, j'ai bien le sujet, le message et les pièces jointes ; les pièces jointes paraissent intactes.

Mais aujourd'hui, un destinataire nous répond à l'email et la pièce jointe était en plein dans le mail et en résumé, il n'a pas trop compris le mail du coup ...
Je me permets de vous fournir le code, afin d'avoir un regard critique, parallèlement j'ai demandé à la personne de me préciser avec quoi elle a lu le mail. Mais à moins d'utiliser un système des années 30, je ne peux pas me permettre de pénaliser certains clients mail, tout comme il est indispensable de rendre un site compatible IE ....

Voici le code :

Code : Tout sélectionner

//$bcc est une adresse e-mail validée par FILTER_VALIDATE_EMAIL // Une succession de *** correspond à une censure de ma part // $args['msgtxt'] est un message text pouvant contenir n'importe quoi (mais je n'ai pas de collègues fous, il n'y a pas de boundary dedans ...) // $fichiers est la liste des fichiers à joindre, avec leur type, etc $boundary="----=_Part_" . md5( uniqid ( rand() ) ); $headers="From: contact@*************\r\n"; if ($bcc) $headers .= "BCC:$bcc\r\n"; $headers.="Reply-To: contact@************\r\nReturn-Path: [email protected]\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"\r\n\n"; $body="--". $boundary ."\nContent-Type: text/plain; charset=UTF-8\r\n\n" . $args['msgtxt'] . "\n\n"; foreach ($fichiers as $eachFile=>$eachValue) { $body .= "--" .$boundary. "\nContent-Type: ".$eachValue['type']."; name=\"".$eachValue['name']."\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"".$eachValue['name']."\"\r\n\n".$eachValue['content']; } $body .= "--" . $boundary ."--"; $subject="Re: Demande de contact *************"; if (!mail($args['destinataire'], $subject, $body, $headers)) { ....

Ce que m'a renvoyé le client (censuré) :

Bonjour, j'ai beaucoup de mal à déchiffrer votre message.
pouvez vous revoir le problème.

Cordialement.

Code : Tout sélectionner

-------------------------------------------------- From: <contact@*********> Sent: Thursday, October 07, 2010 12:04 PM To: <******.****@orange.fr> Subject: Re: Demande de contact ******* > Reply-To: contact@********* > Return-Path: contact@********** > MIME-Version: 1.0 > Content-Type: multipart/mixed; boundary="----=_Part_2fc058c7b442e81aae73ee44f2a4c2b8" > X-Ovh-Tracer-Id: 11200733749******** > Message-ID: <94.23.27.223.12*********.*****@ns0.ovh.net> > X-Ovh-Remote: 94.23.****** (ns******.ovh.net) > X-Ovh-Local: 213.186.***** (ns0.ovh.net) > X-Spam-Check: DONE|U 0.5/N > > > > ------=_Part_2fc058c7b442e81aae73ee44f2a4c2b8 > Content-Type: text/plain; charset=UTF-8 > > Monsieur *********, > > Nous avons le plaisir de vous faire parvenir ci-joint un devis détaillé pour le transfert de vos bobines 8mm sur dvd. > > Pour toute commande ..... > > Je me tiens à votre disposition pour toute information complémentaire, > > Cordialement, > > ******* > ********* > 01.47.******** > > -- Votre message du 06/10/2010 ------ >> Bonjour; j'ai 2******** >> >> Je souhaite recevoir un devis, merci par avance. > > ------=_Part_2fc058c7b442e81aae73ee44f2a4c2b8 > Content-Type: application/pdf; name="Devis N° D000584 ***** *******.pdf" > Content-Transfer-Encoding: base64 > Content-Disposition: attachment; filename="Devis N° D000584 ********* ******.pdf" > > JVBERi0xLjQKJeTjz9IKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291 > cmNlcyAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUuMjggODQxLjg5XQovQ3JvcEJveCBbMCAwIDU5 > NS4yOCA4NDEuODldCi9Db250ZW50cyA0IDAgUgo+PgplbmRvYmoKNCAwIG9iago8PCAvRmlsdGVy > IC9GbGF0ZURlY29kZSAvTGVuZ3RoIDczMjM+PgpzdHJlYW0NCnic7V3Lkh03ct3zK+7GMb4T4lWh ... > ------=_Part_2fc058c7b442e81aae73ee44f2a4c2b8--
C'est un peu comme si la personne avait tout reçu brut ... le code source quoi !

Merci par avance,

Cordialement,

ViPHP
ViPHP | 5462 Messages

08 oct. 2010, 11:46

essaye avec multipart/alternative

devlop78
Invité n'ayant pas de compte PHPfrance

08 oct. 2010, 12:52

Noté. La personne a Windows Live Mail, je l'ai téléchargé, j'ai fait un essai ... ça roule. Alors, que s'est-il passé ... je vais me renseigner sur le multipart ... Sinon, d'autres idées ?