mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-09 22:38:19 +02:00
Fix handling of missing 'content-transfer-encoding' header
Closes: #136 Python's email module raises a KeyError if the header 'content-transfer-encoding' is missing: https://bugs.python.org/issue27321
This commit is contained in:
parent
ce6ce6b5dd
commit
e4a8a05f3d
1 changed files with 14 additions and 2 deletions
|
|
@ -225,6 +225,8 @@ class Mailbox(models.Model):
|
|||
def process_incoming_message(self, message):
|
||||
"""Process a message incoming to this mailbox."""
|
||||
msg = self._process_message(message)
|
||||
if msg is None:
|
||||
return None
|
||||
msg.outgoing = False
|
||||
msg.save()
|
||||
|
||||
|
|
@ -235,6 +237,8 @@ class Mailbox(models.Model):
|
|||
def record_outgoing_message(self, message):
|
||||
"""Record an outgoing message associated with this mailbox."""
|
||||
msg = self._process_message(message)
|
||||
if msg is None:
|
||||
return None
|
||||
msg.outgoing = True
|
||||
msg.save()
|
||||
return msg
|
||||
|
|
@ -363,7 +367,14 @@ class Mailbox(models.Model):
|
|||
)
|
||||
msg.save()
|
||||
message = self._get_dehydrated_message(message, msg)
|
||||
msg.set_body(message.as_string())
|
||||
try:
|
||||
body = message.as_string()
|
||||
except KeyError as exc:
|
||||
# email.message.replace_header may raise 'KeyError' if the header
|
||||
# 'content-transfer-encoding' is missing
|
||||
logger.warning("Failed to parse message: %s", exc,)
|
||||
return None
|
||||
msg.set_body(body)
|
||||
if message['in-reply-to']:
|
||||
try:
|
||||
msg.in_reply_to = Message.objects.filter(
|
||||
|
|
@ -382,6 +393,7 @@ class Mailbox(models.Model):
|
|||
return new_mail
|
||||
for message in connection.get_message(condition):
|
||||
msg = self.process_incoming_message(message)
|
||||
if not msg is None:
|
||||
new_mail.append(msg)
|
||||
self.last_polling = now()
|
||||
if django.VERSION >= (1, 5): # Django 1.5 introduces update_fields
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue