diff options
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r-- | service/pixelated/adapter/model/mail.py | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index f23c2708..618b980a 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -21,6 +21,7 @@ from email.header import decode_header from leap.mail.imap.fields import fields import leap.mail.walk as walk import dateutil.parser as dateparser +from datetime import datetime from pixelated.adapter.model.status import Status import pixelated.support.date from email.MIMEMultipart import MIMEMultipart @@ -291,7 +292,10 @@ class PixelatedMail(Mail): for header in ['From', 'Subject']: _headers[header] = self._decode_header(hdoc_headers.get(header)) - _headers['Date'] = self._get_date() + try: + _headers['Date'] = self._get_date() + except Exception, e: + _headers['Date'] = pixelated.support.date.iso_now() if self.parts and len(self.parts['alternatives']) > 1: _headers['content_type'] = 'multipart/alternative; boundary="%s"' % self.boundary @@ -303,25 +307,35 @@ class PixelatedMail(Mail): return _headers + def _decode_header_with_fallback(self, entry): + try: + return decode_header(entry)[0][0] + except Exception, e: + return entry.encode('ascii', 'ignore') + def _decode_header(self, header): if not header: return None if isinstance(header, list): - return [decode_header(entry)[0][0] for entry in header] + return [self._decode_header_with_fallback(entry) for entry in header] else: - return decode_header(header)[0][0] + return self._decode_header_with_fallback(header) def _get_date(self): date = self.hdoc.content.get('date', None) - if not date: - received = self.hdoc.content.get('received', None) - if received: - date = received.split(";")[-1].strip() - else: - # we can't get a date for this mail, so lets just use now - logger.warning('Encountered a mail with missing date and received header fields. Subject %s' % self.hdoc.content.get('subject', None)) - date = pixelated.support.date.iso_now() - return dateparser.parse(date).isoformat() + try: + if not date: + received = self.hdoc.content.get('received', None) + if received: + date = received.split(";")[-1].strip() + else: + # we can't get a date for this mail, so lets just use now + logger.warning('Encountered a mail with missing date and received header fields. Subject %s' % self.hdoc.content.get('subject', None)) + date = pixelated.support.date.iso_now() + return dateparser.parse(date).isoformat() + except (ValueError, TypeError) as e: + date = pixelated.support.date.iso_now() + return dateparser.parse(date).isoformat() @property def security_casing(self): |