Forum Programmation.python SMTPHandler et unicode

Posté par  .
Étiquettes : aucune
0
30
juin
2010
Bonsoir à tous,

J'ai un petit programme de test qui me permet de logguer par mail des messages d'erreur. Le problème est que ça ne fonctionne pas "par défaut", j'ai une UnicodeEncodeError lors de l'envoi de mail avec des caractères accentués. Je peux contourner le problème en changeant l'encoding par défaut de python (lignes en commentaire) mais ça ne me plaît pas trop, d'après mes lectures c'est juste un pis-aller ... Y a t'il une solution plus propre pour que le SMTPHandler fonctionne correctement ? A noter que le problème n'existe pas pour le RotatingFileHandler, il loggue bien les accents.



import logging,logging.handlers
import sys

#print sys.getdefaultencoding()
#reload(sys)
#sys.setdefaultencoding('utf-8')
#print sys.getdefaultencoding()

fileHandler = logging.handlers.RotatingFileHandler("/tmp/log.log")
smtpHandler = logging.handlers.SMTPHandler(mailhost=("smtp.example.com",25), fromaddr="toto@example.com", toaddrs="toto@example.com", subject=u"msg d'erreur")

LOG = logging.getLogger()
LOG.addHandler(fileHandler)
LOG.addHandler(smtpHandler)


LOG.error(u"sans accent")
LOG.error(u"accentu\u00E9")


Merci pour vos réflexions !
  • # saine lecture

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

    • [^] # Re: saine lecture

      Posté par  . Évalué à 1.

      déjà connu et bookmarké (excellente page d'ailleurs) ! Mais dans le cas qui me préoccupe ça n'apporte vraiment pas de solution...
  • # html ?

    Posté par  . Évalué à 1.

    Si tu acceptes d'envoyer des mails en html, tu pourrais encoder ton Unicode en html.

    cf http://bytes.com/topic/python/answers/654221-unicode-html-en(...)
    • [^] # Re: html ?

      Posté par  . Évalué à 1.

      Le pb est que je ne maîtrise pas l'appel à smtplib, et donc je ne peux pas lui spécifier d'envoyer les mails en html.
      De plus c'est toujours un contournement du pb, et tant qu'à contourner j'utiliserai plutôt un encodage qui supprimerait les accents du type :
      unicodedata.normalize('NFKD', u"xxxx") mais ce que je souhaite vraiment c'est un moyen "propre" de faire fonctionner SMTPHandler.

Suivre le flux des commentaires

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