[SPIP Zone] Problème de charset avec la classe PHPMailer

Est-ce que les autres utilisateurs de la classe PHPMailer ont eu ce même problème de définition du charset non prise en compte (cf commit de Thomas ci-après) ?

En l'occurrence, apparemment, PHPMailer définit un en-tête comme ça :

   Content-Type: text/html; charset="utf-8"

Au lieu de ça :

   Content-Type: text/html; charset=utf-8

Du coup, le client mail ne reconnaît pas "utf-8" comme charset valable, et passe en iso-8859-1...

Début du message réexpédié :

De : tbeaumanoir@gmail.com
Date : 15 janvier 2007 19:39:29 HNEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r8894 - /_plugins_/_test_/clevermail/phpmailer/class.phpmailer.php
Répondre à : spip-zone@rezo.net

Author: tbeaumanoir@gmail.com
Date: Mon Jan 15 19:39:29 2007
New Revision: 8894

Log:
Le charset définit n'était pas utilisé lors de l'envoi...

Modified:
    _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

Modified: _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

--- _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php (original)
+++ _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php Mon Jan 15 19:39:29 2007
@@ -817,7 +817,7 @@
         {
             case "plain":
                 $result .= $this->HeaderLine("Content-Transfer-Encoding", $this->Encoding);
- $result .= sprintf("Content-Type: %s; charset=\"%s\"",
+ $result .= sprintf("Content-Type: %s; charset=%s",
                                     $this->ContentType, $this->CharSet);
                 break;
             case "attachments":
@@ -860,11 +860,11 @@
         switch($this->message_type)
         {
             case "alt":
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                               "text/plain", "");
                 $result .= $this->EncodeString($this->AltBody, $this->Encoding);
                 $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                               "text/html", "");

                 $result .= $this->EncodeString($this->Body, $this->Encoding);

_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

Hello,

Non je n'ai pas ce comportement avec spip listes.

j'ai bien

Content-Type: text/html; charset="utf-8"

Quel client mail effectue la convertion dont vous parlez ?

Je crois avoir lu quelque part que les logiciels microsoft étaient déroutés (pour rester poli) par UTF 8.

BoOz

Nicolas Hoizey a écrit :

Est-ce que les autres utilisateurs de la classe PHPMailer ont eu ce même problème de définition du charset non prise en compte (cf commit de Thomas ci-après) ?

En l'occurrence, apparemment, PHPMailer définit un en-tête comme ça :

  Content-Type: text/html; charset="utf-8"

Au lieu de ça :

  Content-Type: text/html; charset=utf-8

Du coup, le client mail ne reconnaît pas "utf-8" comme charset valable, et passe en iso-8859-1...

Début du message réexpédié :

De : tbeaumanoir@gmail.com
Date : 15 janvier 2007 19:39:29 HNEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r8894 - /_plugins_/_test_/clevermail/ phpmailer/class.phpmailer.php
Répondre à : spip-zone@rezo.net

Author: tbeaumanoir@gmail.com
Date: Mon Jan 15 19:39:29 2007
New Revision: 8894

Log:
Le charset définit n'était pas utilisé lors de l'envoi...

Modified:
   _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

Modified: _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php
====================================================================== ========
--- _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php (original)
+++ _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php Mon Jan 15 19:39:29 2007
@@ -817,7 +817,7 @@
        {
            case "plain":
                $result .= $this->HeaderLine("Content-Transfer- Encoding", $this->Encoding);
- $result .= sprintf("Content-Type: %s; charset=\"%s \"",
+ $result .= sprintf("Content-Type: %s; charset=%s",
                                    $this->ContentType, $this-
   

CharSet);
     

                break;
            case "attachments":
@@ -860,11 +860,11 @@
        switch($this->message_type)
        {
            case "alt":
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/plain", "");
                $result .= $this->EncodeString($this->AltBody, $this->Encoding);
                $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/html", "");

                $result .= $this->EncodeString($this->Body, $this-
   

Encoding);
     

_______________________________________________
Spip-zone-commit@rezo.net - Listes de diffusion sur listes.rezo.net spip-zone-commit
   
-Nicolas

BoOz a écrit :

Hello,

Hello,

Non je n'ai pas ce comportement avec spip listes.

j'ai bien

Content-Type: text/html; charset="utf-8"

Quel client mail effectue la convertion dont vous parlez ?

En fait ce n'est pas au niveau du client mail que s'effectue une correction du charset... c'est lors du send() de PhpMailer qu'il transforme (de tête) :

Content-Type: text/plain; charset="utf-8"

en

Content-Type: text/plain; charset=&quote;utf-8&quote;

Et à l'arrivée avec n'importe quel client mail (thunderbird dans mon cas) on se retrouve avec :

Content-Type: text/plain; charset=iso-8859-1

le charset par défaut de PhpMailer...

Ce problème ne semblait apparaître que lors de l'envoi d'un mail en text/plain (en multipart c'était un autre problème).

Je crois avoir lu quelque part que les logiciels microsoft étaient déroutés (pour rester poli) par UTF 8.

BoOz

Nicolas Hoizey a écrit :

Est-ce que les autres utilisateurs de la classe PHPMailer ont eu ce même problème de définition du charset non prise en compte (cf commit de Thomas ci-après) ?

En l'occurrence, apparemment, PHPMailer définit un en-tête comme ça :

  Content-Type: text/html; charset="utf-8"

Au lieu de ça :

  Content-Type: text/html; charset=utf-8

Du coup, le client mail ne reconnaît pas "utf-8" comme charset valable, et passe en iso-8859-1...

Début du message réexpédié :

De : tbeaumanoir@gmail.com
Date : 15 janvier 2007 19:39:29 HNEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r8894 - /_plugins_/_test_/clevermail/ phpmailer/class.phpmailer.php
Répondre à : spip-zone@rezo.net

Author: tbeaumanoir@gmail.com
Date: Mon Jan 15 19:39:29 2007
New Revision: 8894

Log:
Le charset définit n'était pas utilisé lors de l'envoi...

Modified:
   _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

Modified: _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php
====================================================================== ========
--- _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php (original)
+++ _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php Mon Jan 15 19:39:29 2007
@@ -817,7 +817,7 @@
        {
            case "plain":
                $result .= $this->HeaderLine("Content-Transfer- Encoding", $this->Encoding);
- $result .= sprintf("Content-Type: %s; charset=\"%s \"",
+ $result .= sprintf("Content-Type: %s; charset=%s",
                                    $this->ContentType, $this-

CharSet);
    

                break;
            case "attachments":
@@ -860,11 +860,11 @@
        switch($this->message_type)
        {
            case "alt":
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/plain", "");
                $result .= $this->EncodeString($this->AltBody, $this->Encoding);
                $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/html", "");

                $result .= $this->EncodeString($this->Body, $this-

Encoding);
    

_______________________________________________
Spip-zone-commit@rezo.net - Listes de diffusion sur listes.rezo.net spip-zone-commit
  
-Nicolas

--
Thomas Beaumanoir http://www.clever-age.com
Clever Age - conseil en architecture technique
Tél: +33 1 53 34 66 10 Fax: +33 1 53 34 65 20

re Hello,

En plus je viens de relire la rfc822 et je note ca :

Note that the value of a quoted string parameter does not include the quotes. That is, the quotation marks in a quoted-string are not a
   part of the value of the parameter, but are merely used to delimit
   that parameter value. In addition, comments are allowed in
   accordance with RFC 822 rules for structured header fields. Thus the
   following two forms

     Content-type: text/plain; charset=us-ascii (Plain text)

     Content-type: text/plain; charset="us-ascii"

   are completely equivalent.

Pouvez vous préciser dans quelles conditions vous rencontrez un problème, et quel problème ?

BoOz

BoOz a écrit :

Hello,

Non je n'ai pas ce comportement avec spip listes.

j'ai bien

Content-Type: text/html; charset="utf-8"

Quel client mail effectue la convertion dont vous parlez ?

Je crois avoir lu quelque part que les logiciels microsoft étaient déroutés (pour rester poli) par UTF 8.

BoOz

Nicolas Hoizey a écrit :

Est-ce que les autres utilisateurs de la classe PHPMailer ont eu ce même problème de définition du charset non prise en compte (cf commit de Thomas ci-après) ?

En l'occurrence, apparemment, PHPMailer définit un en-tête comme ça :

Content-Type: text/html; charset="utf-8"

Au lieu de ça :

Content-Type: text/html; charset=utf-8

Du coup, le client mail ne reconnaît pas "utf-8" comme charset valable, et passe en iso-8859-1...

Début du message réexpédié :

De : tbeaumanoir@gmail.com
Date : 15 janvier 2007 19:39:29 HNEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r8894 - /_plugins_/_test_/clevermail/ phpmailer/class.phpmailer.php
Répondre à : spip-zone@rezo.net

Author: tbeaumanoir@gmail.com
Date: Mon Jan 15 19:39:29 2007
New Revision: 8894

Log:
Le charset définit n'était pas utilisé lors de l'envoi...

Modified:
  _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

Modified: _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php
====================================================================== ========
--- _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php (original)
+++ _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php Mon Jan 15 19:39:29 2007
@@ -817,7 +817,7 @@
       {
           case "plain":
               $result .= $this->HeaderLine("Content-Transfer- Encoding", $this->Encoding);
- $result .= sprintf("Content-Type: %s; charset=\"%s \"",
+ $result .= sprintf("Content-Type: %s; charset=%s",
                                   $this->ContentType, $this-
  

CharSet);
    

               break;
           case "attachments":
@@ -860,11 +860,11 @@
       switch($this->message_type)
       {
           case "alt":
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                             "text/plain", "");
               $result .= $this->EncodeString($this->AltBody, $this->Encoding);
               $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                             "text/html", "");

               $result .= $this->EncodeString($this->Body, $this-
  

Encoding);
    

_______________________________________________
Spip-zone-commit@rezo.net - Listes de diffusion sur listes.rezo.net spip-zone-commit
  
-Nicolas

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Je crois que vous devez faire une mauvaise utilisation de phpMailer ...

Pour info, je me suis donné la peine d'implementer phpMailer dans un plugin smtp_mail.
Ce plugin realise le mapping de la fonction envoyer_mail de spip sur phpMailer.

Avantages :
- il n'y a qu'a utiliser la fonction envoyer_mail de spip
- l'utilisateur de spip utilise ou non un serveur smtp selon qu'il active ou non le plugin smtp.
- cette architecture peut être étendue sans avoir a toucher à chaque plugin qui utilise des mails en fonctions des besoins de chacun

Au moins, si il y a un bug, on le verra plus vite si tout le monde utilise la meme implmentation, et la correction profitera aussi a tout le monde.
Ca evitera de trainer 6 versions de phpMailer sur la zone, dont certaines visiblement forkées comme ici.

Et moi, en general, avant de forker une librairie comme ca, je me demande si c'est pas moi qui m'en sert mal, car c'est pas une librairie toute neuve qui vient de sortir, et un truc gros comme ca, ca serait bien etonant !

Cedric

Thomas Beaumanoir a écrit :

BoOz a écrit :
  

Hello,
    
Hello,

Non je n'ai pas ce comportement avec spip listes.

j'ai bien

Content-Type: text/html; charset="utf-8"

Quel client mail effectue la convertion dont vous parlez ?
    
En fait ce n'est pas au niveau du client mail que s'effectue une correction du charset... c'est lors du send() de PhpMailer qu'il transforme (de tête) :

Content-Type: text/plain; charset="utf-8"

en

Content-Type: text/plain; charset=&quote;utf-8&quote;

Et à l'arrivée avec n'importe quel client mail (thunderbird dans mon cas) on se retrouve avec :

Content-Type: text/plain; charset=iso-8859-1

le charset par défaut de PhpMailer...

Ce problème ne semblait apparaître que lors de l'envoi d'un mail en text/plain (en multipart c'était un autre problème).

Je crois avoir lu quelque part que les logiciels microsoft étaient déroutés (pour rester poli) par UTF 8.

BoOz

Nicolas Hoizey a écrit :

Est-ce que les autres utilisateurs de la classe PHPMailer ont eu ce même problème de définition du charset non prise en compte (cf commit de Thomas ci-après) ?

En l'occurrence, apparemment, PHPMailer définit un en-tête comme ça :

  Content-Type: text/html; charset="utf-8"

Au lieu de ça :

  Content-Type: text/html; charset=utf-8

Du coup, le client mail ne reconnaît pas "utf-8" comme charset valable, et passe en iso-8859-1...

Début du message réexpédié :

De : tbeaumanoir@gmail.com
Date : 15 janvier 2007 19:39:29 HNEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r8894 - /_plugins_/_test_/clevermail/ phpmailer/class.phpmailer.php
Répondre à : spip-zone@rezo.net

Author: tbeaumanoir@gmail.com
Date: Mon Jan 15 19:39:29 2007
New Revision: 8894

Log:
Le charset définit n'était pas utilisé lors de l'envoi...

Modified:
   _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php

Modified: _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php
====================================================================== ========
--- _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php (original)
+++ _plugins_/_test_/clevermail/phpmailer/class.phpmailer.php Mon Jan 15 19:39:29 2007
@@ -817,7 +817,7 @@
        {
            case "plain":
                $result .= $this->HeaderLine("Content-Transfer- Encoding", $this->Encoding);
- $result .= sprintf("Content-Type: %s; charset=\"%s \"",
+ $result .= sprintf("Content-Type: %s; charset=%s",
                                    $this->ContentType, $this-
        

CharSet);
    

                break;
            case "attachments":
@@ -860,11 +860,11 @@
        switch($this->message_type)
        {
            case "alt":
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/plain", "");
                $result .= $this->EncodeString($this->AltBody, $this->Encoding);
                $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], "",
+ $result .= $this->GetBoundary($this->boundary[1], $this->CharSet,
                                              "text/html", "");

                $result .= $this->EncodeString($this->Body, $this-
        

Encoding);
    

_______________________________________________
Spip-zone-commit@rezo.net - Listes de diffusion sur listes.rezo.net spip-zone-commit
  
-Nicolas

Je crois que vous devez faire une mauvaise utilisation de phpMailer ...

C'est possible...

Pour info, je me suis donné la peine d'implementer phpMailer dans un
plugin smtp_mail.
Ce plugin realise le mapping de la fonction envoyer_mail de spip sur
phpMailer.
Avantages :
- il n'y a qu'a utiliser la fonction envoyer_mail de spip
- l'utilisateur de spip utilise ou non un serveur smtp selon qu'il
active ou non le plugin smtp.
- cette architecture peut être étendue sans avoir a toucher à chaque
plugin qui utilise des mails en fonctions des besoins de chacun

Il gère aussi les multiparts ?

Au moins, si il y a un bug, on le verra plus vite si tout le monde
utilise la meme implmentation, et la correction profitera aussi a tout
le monde.
Ca evitera de trainer 6 versions de phpMailer sur la zone, dont
certaines visiblement forkées comme ici.

C'est clair !

Et moi, en general, avant de forker une librairie comme ca, je me
demande si c'est pas moi qui m'en sert mal, car c'est pas une librairie
toute neuve qui vient de sortir, et un truc gros comme ca, ca serait
bien etonant !

Je peux t'assurer qu'avant de forker on a bien regarder toute l'exécution pas à pas du code pour s'assurer que le problème venait de là !

Mais on en discute justement ici, pour voir quelle meilleure solution qu'un fork on peut trouver collectivement...

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/