Forum Linux.général Fonction mail de PHP : mails encodés en base64

Posté par  .
Étiquettes :
0
6
juin
2011

Salut à tous,

J'ai un petit soucis avec une Dedibox. En effet, lorsque j'envoie un mail avec la fonction "mail" de PHP, celui-ci arrive normalement :

En revanche, quand j'envoie des mails en HTML (en suivant ce tuto ou via mon tracker TheBugGenie, les mails arrivent encodés en Base64 :

DQotLS0tLT05MDFjOTEwZjAzMGU4MjA3MDYyMjU1NGMyYmI4MjM0Zg0KQ29udGVudC1UeXBlOiB0
ZXh0L3BsYWluOyBjaGFyc2V0PSJJU08tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu
ZzogYmFzZTY0DQoNClNhbHV0IMODwqAgdG91cywgdm9pY2kgdW4gZS1tYWlsIGVudm95w4PCqSBw
YXIgdW4gc2NyaXB0IFBIUC4NCg0KLS0tLS0tLT05MDFjOTEwZjAzMGU4MjA3MDYyMjU1NGMyYmI4
MjM0Zg0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9IklTTy04ODU5LTEiDQpDb250
ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0DQoNCjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48
Yj5TYWx1dCDDg8KgIHRvdXM8L2I+LCB2b2ljaSB1biBlLW1haWwgZW52b3nDg8KpIHBhciB1biA8
aT5zY3JpcHQgUEhQPC9pPi48L2JvZHk+PC9odG1sPg0KDQotLS0tLS0tPTkwMWM5MTBmMDMwZTgy
MDcwNjIyNTU0YzJiYjgyMzRmLS0NCg0KLS0tLS0tLT05MDFjOTEwZjAzMGU4MjA3MDYyMjU1NGMy
YmI4MjM0Zi0tDQo=

Un petit coup de base64 -d me le confirme rapidement.

Avez-vous une idée de pourquoi la fonction mail envoie les mails HTML encodés en Base64 ?

Bonne journée ;) .

  • # dedibox = tu es root = tu configures toi meme

    Posté par  . Évalué à 2.

    si ca marche en PHP avec mail()
    et que ca ne marche pas depuis ta page html, ou ton buggenie, be faut regarder la configuration de ces derniers.

    ex : dans mon CMS je peux lui dire d'envoyer en html ou en txt, en piece jointe ou pas, et probablement en base64 ou pas.

  • # Au choix...

    Posté par  (site web personnel) . Évalué à 2.

    Le bon point est que mail, la fonction de base, marche....
    Tu utilises un soft qui lui te fait de la m.... tu as deux options :

    1) Soit tu changes de soft ( pour la fonction mail, ou le pear php-mail... )

    2) Soit tu debug le soft
    - as tu regardé les header, le content type il est bon ? et le reste du mime ?
    - déroule le traitement d'envoie de mail, avec des echo partout !

    Fuse : j'en Use et Abuse !

    • [^] # Re: Au choix...

      Posté par  . Évalué à 0.

      La fonction "mail" fonctionne quand je l'utilise comme ceci :

      mail('moi@gmail.com', 'salut', 'message');

      Cependant, dés que j'y inclue du HTML, donc en suivant ce tuto (qui utilise aussi la fonction mail), je reçois les mails en Base64...

      Ce tuto, je l'ai testé à plusieurs endroits, et il n'y a que sur ma Dedibox que je les reçois en Base64... Donc la fonction Mail a bien un problème.

      Quand je fais un error_log, je constate que au sein de PHP, les variables transmises à la fonction mail sont toujours en clair. C'est dans le traitement de la fonction mail que le mail doit être encodé en Base64 et qu'il n'est jamais décrypté...

      Un exemple de mail reçu en Base64 :

      Delivered-To: monadresse@gmail.com
      Received: by 10.220.187.76 with SMTP id cv12cs14207vcb;
              Mon, 6 Jun 2011 06:14:56 -0700 (PDT)
      Received: by 10.216.183.65 with SMTP id p43mr2510091wem.35.1307366095237;
              Mon, 06 Jun 2011 06:14:55 -0700 (PDT)
      Return-Path: <www-data@domaine.eu>
      Received: from mail.domaine.eu (mail.domaine.eu [XX.XX.XX.XX])
              by mx.google.com with ESMTP id z9si5906862wec.15.2011.06.06.06.14.53;
              Mon, 06 Jun 2011 06:14:54 -0700 (PDT)
      Received-SPF: pass (google.com: best guess record for domain of www-data@domaine.eu designates XX.XX.XX.XX as permitted sender) client-ip=88.191.75.182;
      Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of www-data@domaine.eu designates XX.XX.XX.XX as permitted sender) smtp.mail=www-data@domaine.eu
      Received: from localhost (localhost.localdomain [127.0.0.1])
          by mail.domaine.eu (Postfix) with ESMTP id 7EC25CC089
          for <monadresse@gmail.com>; Mon,  6 Jun 2011 15:14:53 +0200 (CEST)
      X-Quarantine-ID: <rtloxe+GTKam>
      X-Virus-Scanned: amavisd-new at domaine.eu
      X-Amavis-Alert: BAD HEADER, MIME error: error: unexpected end of preamble
      Received: from mail.domaine.eu ([127.0.0.1])
          by localhost (mail.domaine.eu [127.0.0.1]) (amavisd-new, port 10024)
          with ESMTP id rtloxe+GTKam for <monadresse@gmail.com>;
          Mon,  6 Jun 2011 15:14:52 +0200 (CEST)
      Received: from sd-server.dedibox.fr (sd-server.dedibox.fr [XX.XX.XX.XX])
          by mail.domaine.eu (Postfix) with ESMTP id DBCD0CC00A
          for <monadresse@gmail.com>; Mon,  6 Jun 2011 15:14:52 +0200 (CEST)
      Received: by sd-server.dedibox.fr (Postfix, from userid 33)
          id ACBFD201FE; Mon,  6 Jun 2011 15:14:52 +0200 (CEST)
      To: monadresse@gmail.com
      Subject: test
      X-PHP-Originating-Script: 1000:contact.php
      From: "Support"<support@domaine.com>
      Reply-to: "Support" <support@domaine.com>
      MIME-Version: 1.0
      Content-Type: multipart/alternative;
       boundary="-----=901c910f030e82070622554c2bb8234f"
      Content-Transfer-Encoding: BASE64
      Message-Id: <20110606131452.ACBFD201FE@sd-server.dedibox.fr>
      Date: Mon,  6 Jun 2011 15:14:52 +0200 (CEST)
      

      On dirait que le header est corrompu. Pourquoi cela ne le fait-il que sur la Dedibox ?

      • [^] # Re: Au choix...

        Posté par  . Évalué à 1.

        ça aiderait de nous donner ton code exact (plutôt que le tuto dont tu t'es inspiré) et un export des variables que tu envoies à cet object/fonction/page

        Content-Transfer-Encoding: BASE64

        C'est pas bon ça, tu ne precises peut être pas l'encodage pour les differentes parties du mail, du coup sur ta dedibox la valeur par défaut est base64 (pure suposition ...)

        • [^] # Re: Au choix...

          Posté par  . Évalué à 0.

          Concernant le code, je ne l'ai pas modifié, car c'était juste pour réaliser des tests : le code est le même sur mon serveur.

          Donc concernant le Content-Transfer-Encoding: BASE64, que mettre à la place ? Dans la configuration actuelle, le serveur à l'air de forcer le Base64, puisque moi je spécifies 8bits...

          • [^] # Re: Au choix...

            Posté par  (site web personnel) . Évalué à 2.

            Et s'il faut parler erreur "Content-Type: text/html; charset="iso-8859-1"
            me parait mieux qu'un content alternative + mime si tu n'as pas de pièce jointe !

            Tu dis spécifier du 8 bit mais si tu regardes les header du mail ce n'est pas le cas....
            Ton soft a un bug de m... ( je me répète non ? )
            Soit tu debug, soit tu fait à ta sauce, soit tu vas pleurer chez le fournisseur du logiciel ( 3 ème option )!

            Et si il faut parler tuto :
            http://www.vulgarisation-informatique.com/mail.php

            Fuse : j'en Use et Abuse !

            • [^] # Re: Au choix...

              Posté par  . Évalué à 0.

              Okay, donc j'ai fait des tests. J'ai repris ton lien sur Vulgarisation-informatique.

              J'ai repris les codes tels quels.

              L'envoi de mail au format texte : OK.
              L'envoi de mail au format HTML : OK

              L'envoi de mail au formats texte et HTML : Fail...

              Le mail au format texte & html m'arrive en Base64...

              Pour un peu plus d'infos, voici le mail "brut" :

              Delivered-To: adresse@gmail.com
              Received: by 10.220.187.76 with SMTP id cv12cs36709vcb;
                      Tue, 7 Jun 2011 00:18:28 -0700 (PDT)
              Received: by 10.227.174.2 with SMTP id r2mr5888713wbz.87.1307431106695;
                      Tue, 07 Jun 2011 00:18:26 -0700 (PDT)
              Return-Path: <www-data@domaine.eu>
              Received: from mail.domaine.eu (mail.domaine.eu [XX.XX.XX.XX])
                      by mx.google.com with ESMTP id p18si11645107wbh.3.2011.06.07.00.18.25;
                      Tue, 07 Jun 2011 00:18:25 -0700 (PDT)
              Received-SPF: pass (google.com: best guess record for domain of www-data@domaine.eu designates XX.XX.XX.XX as permitted sender) client-ip=XX.XX.XX.XX;
              Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of www-data@domaine.eu designates XX.XX.XX.XX as permitted sender) smtp.mail=www-data@domaine.eu
              Received: from localhost (localhost.localdomain [127.0.0.1])
                  by mail.domaine.eu (Postfix) with ESMTP id 056E4CC08B
                  for <adresse@gmail.com>; Tue,  7 Jun 2011 09:18:25 +0200 (CEST)
              X-Quarantine-ID: <q0rke6jhnNkT>
              X-Virus-Scanned: amavisd-new at domaine.eu
              X-Amavis-Alert: BAD HEADER, MIME error: error: unexpected end of preamble
              Received: from mail.domaine.eu ([127.0.0.1])
                  by localhost (mail.domaine.eu [127.0.0.1]) (amavisd-new, port 10024)
                  with ESMTP id q0rke6jhnNkT for <adresse@gmail.com>;
                  Tue,  7 Jun 2011 09:18:12 +0200 (CEST)
              Received: from server.dedibox.fr (server.dedibox.fr [YY.YY.YY.YY])
                  by mail.domaine.eu (Postfix) with ESMTP id 882C3CC00C
                  for <adresse@gmail.com>; Tue,  7 Jun 2011 09:18:12 +0200 (CEST)
              Received: by server.dedibox.fr (Postfix, from userid 33)
                  id 6E44720234; Tue,  7 Jun 2011 09:18:12 +0200 (CEST)
              To: adresse@gmail.com
              Subject: 
              X-PHP-Originating-Script: 1000:mail-multi.php
              From: "Nom" <support@autredomaine.com>
              MIME-Version: 1.0
              Content-Type: multipart/alternative; boundary="-----=8e3be7a1e72f0ddec604901d4889fdaa"
              Content-Transfer-Encoding: BASE64
              Message-Id: <20110607071812.6E44720234@server.dedibox.fr>
              Date: Tue,  7 Jun 2011 09:18:12 +0200 (CEST)
              
              VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KCi0tLS0tLS09OGUz
              YmU3YTFlNzJmMGRkZWM2MDQ5MDFkNDg4OWZkYWEtLQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47
              IGNoYXJzZXQ9Imlzby04ODU5LTEiCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkJv
              bmpvdXIsCgpWb2ljaSB1biBtZXNzYWdlIGF1IGZvcm1hdCB0ZXh0ZQoKLS0tLS0tLT04ZTNiZTdh
              MWU3MmYwZGRlYzYwNDkwMWQ0ODg5ZmRhYS0tCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFy
              c2V0PSJpc28tODg1OS0xIgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Cgo8aHRtbD4K
              ICAgICA8aGVhZD4KICAgICA8dGl0bGU+VGl0cmU8L3RpdGxlPgogICAgIDwvaGVhZD4KICAgICA8
              Ym9keT5UZXN0IGRlIG1lc3NhZ2UgYXUgZm9ybWF0IEhUTUwgPGI+Z3JhczwvYj48L2JvZHk+CiAg
              ICAgPC9odG1sPgoKLS0tLS0tLT04ZTNiZTdhMWU3MmYwZGRlYzYwNDkwMWQ0ODg5ZmRhYS0tCg==
              
              • [^] # Re: Au choix...

                Posté par  . Évalué à 1.

                Copie ton code php stp !
                Le mail n'est pas bon c'est sur, mais si on ne sait pas ce que tu envoies a la fonction mail, on peut difficilement t'aider ..

                • [^] # Re: Au choix...

                  Posté par  . Évalué à 0.

                  Voici le code :

                      $destinataire=$_POST['mail'];
                       $email_expediteur='support@vm-project.com';
                       $email_reply=$email_expediteur;
                  
                       $message_texte='Bonjour,'."\n\n".'Voici un message au format texte'; 
                       $message_html='<html>
                       <head>
                       <title>Titre</title>
                       </head>
                       <body>Test de message au format HTML <b>gras</b></body>
                       </html>';
                  
                       $frontiere = '-----=' . md5(uniqid(mt_rand()));
                  
                       $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 = '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 .= '--'.$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é';
                  

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.