Implement better handling of corner cases

This commit is contained in:
XANTRONIX Development 2024-11-08 11:17:59 -05:00
parent 54e5e7d0e4
commit d19c02228e

View file

@ -1,5 +1,6 @@
import re
import enum
import datetime
from dateparser.search import search_dates
from email.header import decode_header
@ -44,7 +45,7 @@ class MBoxReaderBuffer():
return self.lines[line][0:5] == 'From '
def is_header_line(self, line):
return re.match('^([^:]+): (.*)$', self.lines[line]) is not None
return re.match('^([A-Za-z0-9\\-]+): (.*)$', self.lines[line]) is not None
def is_start(self):
if self.lines[0] is None or self.lines[1] is None:
@ -67,9 +68,12 @@ def decode(text: str):
decoded = decode_header(text)[0]
if decoded[1] is None:
return decoded[0]
return str(decoded[0])
return str(decoded[0], decoded[1])
try:
return str(decoded[0], decoded[1])
except:
return str(decoded[0])
class MBoxMessage():
__slots__ = 'state', 'headers', 'line', 'content', 'body', 'key',
@ -113,7 +117,16 @@ class MBoxMessage():
return self.headers.get(key.lower())
def date(self):
return search_dates(self.headers['date'])[0][1]
try:
return search_dates(self.headers['date'])[0][1]
except:
return datetime.datetime.fromtimestamp(0)
def sender(self):
return self.headers.get('from', 'Unknown')
def subject(self):
return self.headers.get('subject', '(no subject)')
def is_first_line(self):
return len(self.headers) == 1 and (self.body == '' or self.body is None)