Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-06-2007 15:38:54

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

[Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Bonjour,
J'ai quelques soucis avec Zend_Mail... J'arrive à envoyer des mails via SMTP sans problèmes, mais j'ai un soucis avec certains caractères (apparement sans que ce soit lié aux accents ou autres).
Voilà mon code :

Code:

//dans le constructeur de ma classe
Zend_Loader::loadClass('Zend_Mail_Transport_Smtp');
Zend_Loader::loadClass('Zend_Mail');
$tr = new Zend_Mail_Transport_Smtp(SMTP_HOST);
Zend_Mail::setDefaultTransport($tr);

....

//Et plus loin, dans ma fonction send()

$bodyHtml=$this->buildBody($dataView);
$oMail=new Zend_Mail('utf-8');
$oMail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
foreach ($destinataires as $destinataire){
      $oMail->addTo($destinataire['mail'], $destinataire['nom']);
}
$oMail->setSubject($dataView->infosAction['a_o_shortname'].'-'.$dataView->infosAction['a_a_ref'].'/'.$dataView->infosAction['a_a_chrono_id'].'-'.$dataView->infosAction['a_a_s_id']);
$oMail->setBodyHtml($bodyHtml, 'utf8');
$oMail->send();

J'allais oublier le résultat:
http://img153.imageshack.us/img153/6287/actiontl5.th.jpg

Dernière modification par haltabush (16-07-2007 10:55:37)

Hors ligne

 

#2 29-06-2007 15:46:13

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Comme vous voyez il y a quelques caractères remplacés par des '=', les '=0X' apparaissent un peu partout, etc...
Si vous voyez d'où ça peut venir...

Hors ligne

 

#3 29-06-2007 16:40:38

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Réflexion faite, les accents ne marchent plus non plsu :S
Gnnnnn pourquoi faut que ça arrive un vendredi soir à cinq heure moin vingt, hein?!

Hors ligne

 

#4 16-07-2007 10:20:21

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Contrairement à ce qu'on pourrait penser, 2 semaines après ça ne marche pas mieux (je bossais sur autre chose avant)
Quelqu'un a déjà utilisé Zend_Mail en UTF8?

Edit : avec ce code, les accents marchent... J'ai toujours des problèmes avec des caractères remplacés par des "=", par contre... Des idées?


Re EDIT : Yahou ca marche smile Me manquait l'encoding 8 bits, au niveau de 'setBodyHtml'.
Voilà la solution :

Code:

    $oMail=new Zend_Mail('UTF-8');
    $oMail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
    foreach ($destinataires as $destinataire){
        $oMail->addTo($destinataire['mail'], $destinataire['nom']);
    }
    $oMail-> setSubject($dataView->infosAction['a_o_shortname']. '-' .$dataView->infosAction['a_a_ref']. '/' .$dataView->infosAction['a_a_chrono_id']. '-' .$dataView->infosAction['a_a_s_id']);
    $oMail->setBodyHtml($bodyHtml, 'UTF-8', Zend_Mime::ENCODING_8BIT );
    $oMail->send();

Dernière modification par haltabush (16-07-2007 10:55:14)

Hors ligne

 

#5 14-11-2007 18:53:56

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Pour compléter cette discution,

Il faut savoir qu'il y a encore des clients mail et surtout des webmail (imp.free.fr, hotmail...) qui ne lisent pas ou pas encore l' utf-8.

J'ai fini par convertir le contenu des mails de utf-8 vers iso-8859-1 avec iconv()
mb_convert_encoding() fonctionne aussi mais les apostrophes sont remplacé par des points d'interrogation.

Même une fois converti en iso  avec Zend_Mime::ENCODING_QUOTEDPRINTABLE par défaut (dans setBodyTex())  je continu a avoir tout les caractères accentués qui pètent.
Finalement j'ai obtenu les meilleurs résultats avec un encodage 8bits.


Code:

// Convert from utf8 to ISO-8859-1

// with iconv
// string $in_charset, string $out_charset, string $str 
$mailContent = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $mailContent);

// with mb_convert_encoding
// string $str, string $to_encoding [, mixed $from_encoding]
$mailContent = mb_convert_encoding ($mailContent, 'iso-8859-1', 'utf-8');


$mail->setBodyText($mailContent, 'ISO-8859-1', Zend_Mime::ENCODING_8BIT);

Quelques ressources intéressantes :

Unicode and e-mail
http://en.wikipedia.org/wiki/Unicode_and_e-mail
http://www.sitepoint.com/blogs/2006/08/ … omponents/

MIME
http://en.wikipedia.org/wiki/MIME

Dernière modification par 2mx (14-11-2007 19:02:30)

Hors ligne

 

#6 09-10-2008 18:16:25

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Bonjour,

Je rebondis sur ce sujet car j'ai un problème d'encodage mais dans mes sujets.
J'ai essayé vos diverses solutions mais rien n'y fait. En testant, ta solution 2mx le sujet sort propre mais sans les accents.

Alors quand on regardes le code de setSubject de la classe Zend_Mail :

Code:

    /**
     * Sets the subject of the message
     *
     * @param   string    $subject
     * @return  Zend_Mail Provides fluent interface
     * @throws  Zend_Mail_Exception
     */
    public function setSubject($subject)
    {
        if ($this->_subject === null) {
            $subject = strtr($subject,"\r\n\t",'???');
            $this->_subject = $this->_encodeHeader($subject);
            $this->_storeHeader('Subject', $this->_subject);
        } else {
            /**
             * @see Zend_Mail_Exception
             */
            require_once 'Zend/Mail/Exception.php';
            throw new Zend_Mail_Exception('Subject set twice');
        }
        return $this;
    }

le sujet passe par la fonction _encodeHeader qui doit être à la source de mes déboires....
En effet si je remplace la ligne ci-dessus :

Code:

            $this->_subject = $this->_encodeHeader($subject);

par

Code:

            $this->_subject = $subject;

Tout marche parfaitement.

Donc j'en ai déduit qu'il me fallait surcharger quelque peu la classe Zend_Mail de ZF (c'est peut être un peu violent comme solution ?) et cela donne cela :

Code:

<?php

class My_Mail extends Zend_Mail {
    
    public function __construct() {
        parent::__construct();
    }
    
    /**
     * Sets the subject of the message
     *
     * @param   string    $subject
     * @return  Zend_Mail Provides fluent interface
     * @throws  Zend_Mail_Exception
     */
    public function setSubject($subject)
    {
        if ($this->_subject === null) {
            $subject = strtr($subject,"\r\n\t",'???');
            $this->_subject = $subject;
            $this->_storeHeader('Subject', $this->_subject);
        } else {
            /**
             * @see Zend_Mail_Exception
             */
            require_once 'Zend/Mail/Exception.php';
            throw new Zend_Mail_Exception('Subject set twice');
        }
        return $this;
    }    
}

Et là tout fonctionne.
Alors je précise que ma chaine de caratères sujet de mon mail vient d'un fichier config.ini, cette chaine contient des caractères &eacute; (par exemple) et se trouve entre guillemets.

Je voulais par contre poser une question aux spécialistes du forum. Pensez vous que cette modification apporte quelquechose de négatif dans le code (sécurité, ou autre) ??

Merci de vos retours... wink

Dernière modification par elkolonel (10-10-2008 11:54:22)

Hors ligne

 

#7 10-10-2008 09:05:07

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Bonjour elkolonel,

Oui moi aussi je continus a avoir des problèmes avec Zend_Mail, notamment avec ce bug : http://framework.zend.com/issues/browse/ZF-1688 et je me demande si je ne vais pas finir par utiliser ezcMail (http://www.ezcomponents.org/docs/tutorials/Mail).

Ou alors surcharger Zend_Mail mais je n'ai pas trop le temps.

Sinon pour ce qui est de la sécurité sur ta surcharge je ne serrai dire... Jette un oeil ici :
http://www.php-security.org/MOPB/MOPB-34-2007.html
http://en.wikipedia.org/wiki/E-mail_injection

Hors ligne

 

#8 10-10-2008 09:58:03

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Merci 2mx,

Comme pour ma part les champs sujets sont écrits en dur dans mon application et ne sont pas le résultat d'un input dans un formulaire, je ne crains pas les failles présentées (merci au passage pour les liens).

Je me suis risqué à poster ma solution sur le gestionnaire de bug du ZF. J'ai pu voir que les critiques vont bon train concernant ce bug qui dure depuis plus d'un an. J'espère ne pas être trop à côté de la plaque par rapport aux experts wink

Dans tout les cas, moi cela m'a permis de faire fonctionner mon envoi de mail et c'est bien là l'essentiel non ?

Hors ligne

 

#9 10-10-2008 15:19:54

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

Au final mo, "effronterie" aura payé wink

Thorsten Suckow-Homberg a répondu en postant une solution bien plus élégante que la mienne et permettant surtout de conserver les notions de sécurités.

Dans l'attente d'une solution intégrée directement dans le Zend Framework.

Cordialement,

Hors ligne

 

#10 10-10-2008 15:57:18

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

elkolonel a écrit:

Au final mo, "effronterie" aura payé wink

Thorsten Suckow-Homberg a répondu...

Cool ça a fait bouger un peu les choses smile

Hors ligne

 

#11 10-10-2008 16:23:46

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [Résolu :) ][Zend_Mail][ZF 1.0 RC3]Problème d'encodage, ou... ?!

En effet...
Je vais peut être passer plus de temps dans le bug tracker... lol

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages