[FIX] core: correctly decode 8bit mail headers

When an header contains surrogates, an Header object is returned when
read headers from Message objects.

Also, correctly join header parts in python3.
This commit is contained in:
Christophe Simonis
2018-05-22 16:45:59 +02:00
parent ea3385b41c
commit 3d7b238b8e
+6 -3
View File
@@ -10,7 +10,7 @@ import socket
import threading
import time
from email.header import decode_header
from email.header import decode_header, Header
from email.utils import getaddresses, formataddr
from lxml import etree
@@ -524,11 +524,14 @@ def decode_smtp_header(smtp_header):
text. email.header decode_header method return a decoded string and its
charset for each decoded par of the header. This method unicodes the
decoded header and join them in a complete string. """
if isinstance(smtp_header, Header):
smtp_header = ustr(smtp_header)
if smtp_header:
text = decode_header(smtp_header.replace('\r', ''))
# The joining space will not be needed as of Python 3.3
# See https://hg.python.org/cpython/rev/8c03fe231877
return ' '.join([ustr(x[0], x[1]) for x in text])
# See https://github.com/python/cpython/commit/07ea53cb218812404cdbde820647ce6e4b2d0f8e
sep = ' ' if pycompat.PY2 else ''
return sep.join([ustr(x[0], x[1]) for x in text])
return u''
# was mail_thread.decode_header()