def decodeWrapper(header): # Decodes an Email header, returns a string # A hack for headers without a space between decoded name and email try: dec = email.header.decode_header(header.replace('=?=<', '=?= <')) except email.errors.HeaderParseError: logger.warning('Exception in decode, skipping.') return header parts = [] for dec_part in dec: if dec_part[1]: try: parts.append(dec_part[0].decode(dec_part[1])) except (AttributeError, LookupError, UnicodeDecodeError): logger.warning('Exception in decode, skipping.') elif isinstance(dec_part[0], bytes): parts.append(dec_part[0].decode()) else: parts.append(dec_part[0]) return str.join(' ', parts)
def getHeaderWrapper(message, header_name, decode): header = message[header_name] if isinstance(header, str): header = header.replace(' \r\n', '').replace('\r\n', '') return (decodeWrapper(header) if decode else header) return ''
def test_dump_subject(header): # workaround for http://bugs.python.org/issue504152 header = header.replace('\r\n ', ' ') msg = rfc822.Message(StringIO.StringIO(header)) sub = msg["subject"] data = email.header.decode_header(sub) sub = data[0][0] subcharset = data[0][1] if subcharset != None: sub = sub.decode(subcharset) safe_print('\tSubject: [%s].' % (sub))
def dump_subject(header): # workaround for http://bugs.python.org/issue504152 header = header.replace("\r\n ", " ") msg = rfc822.Message(StringIO.StringIO(header)) if msg.has_key("subject"): sub = msg["subject"] data = email.header.decode_header(sub) sub = data[0][0] subcharset = data[0][1] if subcharset != None: sub = sub.decode(subcharset) safe_print("\tSubject: [%s]." % (sub)) else: safe_print("\tSubject: [%s]." % ("[no subject]"))
def dump_subject(header): # workaround for http://bugs.python.org/issue504152 header = header.replace('\r\n ', ' ') msg = rfc822.Message(StringIO.StringIO(header)) if (msg.has_key("subject")): sub = msg["subject"] data = email.header.decode_header(sub) sub = data[0][0] subcharset = data[0][1] if subcharset != None: sub = sub.decode(subcharset) safe_print('\tSubject: [%s].' % (sub)) else: safe_print('\tSubject: [%s].' % ("[no subject]"))
def clean_header(header): """ The headers returned by the IMAP server are not necessarily human-friendly, especially if they contain non-ascii characters. This function cleans all of this and return a beautiful, utf-8 encoded header. """ if header is None: return "" if header.startswith('"'): header = header.replace('"', "") cleaned = email.header.decode_header(header) assembled = "" for element in cleaned: if assembled == "": separator = "" else: separator = " " if element[1] is not None: decoded = element[0].decode(element[1]) else: decoded = element[0] assembled += "%s%s" % (separator, decoded) return assembled