From 0d8be1380731a1aecc0de2923766a30a1f596ccd Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 31 Jan 2010 14:54:31 +0000 Subject: [PATCH] correctly decode headers git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3701 fd906abe-77d9-0310-91a1-e0d9ade77398 --- integrator/mail/imap.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/integrator/mail/imap.py b/integrator/mail/imap.py index f588b2d..9fba519 100644 --- a/integrator/mail/imap.py +++ b/integrator/mail/imap.py @@ -24,7 +24,7 @@ $Id$ """ from datetime import datetime -import email +import email, email.Header from logging import getLogger import os import time @@ -84,13 +84,13 @@ class IMAPCollectionProvider(object): resourceType = loopsRoot.getConceptManager()['email'] for addr in addresses: msg = client._collectedObjects[addr] - title = msg['Subject'] - sender = msg['From'] - receiver = msg['To'] - raw_date = msg['Date'].rsplit(' ', 1)[0] - fmt = '%a, %d %b %Y %H:%M:%S' + title = decodeHeader(msg['Subject']) + sender = decodeHeader(msg['From']) + receiver = decodeHeader(msg['To']) + #raw_date = msg['Date'].rsplit(' ', 1)[0] + #fmt = '%a, %d %b %Y %H:%M:%S' #date = datetime(*(time.strptime(raw_date, fmt)[0:6])) - date = datetime(*(email.Utils.parsedate(raw_date)[0:6])) + date = datetime(*(email.Utils.parsedate(msg['Date'])[0:6])) parts = getPayload(msg) if 'html' in parts: text = '




'.join(parts['html']) @@ -115,6 +115,15 @@ class IMAPCollectionProvider(object): yield obj +def decodeHeader(h): + result = [] + for v, dec in email.Header.decode_header(h): + if dec: + v = v.decode(dec) + result.append(v) + return ''.join(result) + + def getPayload(msg): parts = {} for msg in msg.walk():