summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/model/mail.py38
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):