diff --git a/imap_tools/main.py b/imap_tools/main.py index 39db6ba..037c5ba 100644 --- a/imap_tools/main.py +++ b/imap_tools/main.py @@ -239,7 +239,10 @@ def _decode_value(value, encoding): if encoding in ['utf-8', None]: return value.decode('utf-8', 'ignore') else: - return value.decode(encoding) + try: + return value.decode(encoding) + except LookupError: # unknown encoding + return value.decode('utf-8', 'ignore') return value @property @@ -274,6 +277,7 @@ def _parse_email_address(address: str) -> dict: @:return dict(name: str, email: str, full: str) """ address = ''.join(char for char in address if char.isprintable()) + address = re.sub('[\n\r\t]+', ' ', address) result = dict(email='', name='', full='') if '<' in address and '>' in address: match = re.match('(?P.*)?(?P<.*>)', address, re.UNICODE) @@ -288,8 +292,7 @@ def _parse_email_address(address: str) -> dict: @property def from_values(self) -> dict: """The address of the sender (all data)""" - from_header_cleaned = re.sub('[\n\r\t]+', ' ', self.obj['from']) - msg_from = decode_header(from_header_cleaned) + msg_from = decode_header(self.obj['from']) msg_txt = ''.join(self._decode_value(part[0], part[1]) for part in msg_from) return self._parse_email_address(msg_txt) diff --git a/setup.py b/setup.py index f533dc4..c001fb3 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='imap_tools', - version='0.3', + version='0.4', packages=['imap_tools'], url='https://github.com/ikvk/imap_tools', license='MIT',