mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-09 22:38:19 +02:00
Always store payload parts having a Content-Disposition of 'attachment' as attachments, even if their Content-Type is text/plain. Fixes #52.
Squashed commit of the following: commit5bcbac33d6Author: Adam Coddington <me@adamcoddington.net> Date: Tue Jul 7 23:05:15 2015 -0700 Add handling for situations in which the message was deleted in another thread before processing. commit6183f68b39Author: Adam Coddington <me@adamcoddington.net> Date: Tue Jul 7 22:58:15 2015 -0700 Always store message as attachment if its content-disposition is marked as such. commit4c16494b1aAuthor: Adam Coddington <me@adamcoddington.net> Date: Tue Jul 7 22:46:52 2015 -0700 Adding a (hopefully) failing test case for #52.
This commit is contained in:
parent
95f4d5c7ff
commit
ff433a24f4
4 changed files with 53 additions and 2 deletions
|
|
@ -298,7 +298,10 @@ class Mailbox(models.Model):
|
|||
)
|
||||
)
|
||||
new.set_payload('')
|
||||
elif msg.get_content_type() not in TEXT_STORED_MIMETYPES:
|
||||
elif (
|
||||
(msg.get_content_type() not in TEXT_STORED_MIMETYPES) or
|
||||
('attachment' in msg.get('Content-Disposition', ''))
|
||||
):
|
||||
filename = msg.get_filename()
|
||||
if not filename:
|
||||
extension = mimetypes.guess_extension(msg.get_content_type())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
MIME-Version: 1.0
|
||||
Received: by 10.76.173.10 with HTTP; Tue, 7 Jul 2015 19:50:29 -0700 (PDT)
|
||||
X-Originating-IP: [71.63.222.120]
|
||||
Date: Tue, 7 Jul 2015 19:50:29 -0700
|
||||
Delivered-To: me@adamcoddington.net
|
||||
Message-ID: <CAMdmm+ixRrk+SY2ktbTbGcQctY0VrCZ9C2VJtMqwiY3Zce23Ng@mail.gmail.com>
|
||||
Subject: Test e-mail message
|
||||
From: Adam Coddington <me@adamcoddington.net>
|
||||
To: Adam Coddington <me@adamcoddington.net>
|
||||
Content-Type: multipart/mixed; boundary=089e0111d1089c45be051a5433d8
|
||||
|
||||
--089e0111d1089c45be051a5433d8
|
||||
Content-Type: multipart/alternative; boundary=089e0111d1089c45b4051a5433d6
|
||||
|
||||
--089e0111d1089c45b4051a5433d6
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
|
||||
Has an attached text document, too!
|
||||
|
||||
--089e0111d1089c45b4051a5433d6
|
||||
Content-Type: text/html; charset=UTF-8
|
||||
|
||||
<div dir="ltr">Has an attached text document, too!</div>
|
||||
|
||||
--089e0111d1089c45b4051a5433d6--
|
||||
--089e0111d1089c45be051a5433d8
|
||||
Content-Type: text/plain; charset=US-ASCII; name="attachment.txt"
|
||||
Content-Disposition: attachment; filename="attachment.txt"
|
||||
Content-Transfer-Encoding: base64
|
||||
X-Attachment-Id: f_ibu64edo0
|
||||
|
||||
VGhpcyBpcyBhbiBhdHRhY2htZW50Lgo=
|
||||
--089e0111d1089c45be051a5433d8--
|
||||
|
|
@ -230,3 +230,12 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
second_reply_msg = msg.reply(reply_email_object)
|
||||
|
||||
self.assertEqual(self.mailbox.from_email, second_reply_msg.from_header)
|
||||
|
||||
def test_message_with_text_attachment(self):
|
||||
email_object = self._get_email_object(
|
||||
'message_with_text_attachment.eml',
|
||||
)
|
||||
|
||||
msg = self.mailbox.process_incoming_message(email_object)
|
||||
|
||||
self.assertEqual(msg.attachments.all().count(), 1)
|
||||
|
|
|
|||
|
|
@ -103,7 +103,13 @@ class ImapTransport(EmailTransport):
|
|||
typ, msg_contents = self.server.uid('fetch', uid, '(RFC822)')
|
||||
if not msg_contents:
|
||||
continue
|
||||
message = self.get_email_from_bytes(msg_contents[0][1])
|
||||
try:
|
||||
message = self.get_email_from_bytes(msg_contents[0][1])
|
||||
except TypeError:
|
||||
# This happens if another thread/process deletes the
|
||||
# message between our generating the ID list and our
|
||||
# processing it here.
|
||||
continue
|
||||
|
||||
if condition and not condition(message):
|
||||
continue
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue