1
0
Fork 0

Merging in changes from buriy:master (pr #5)

This commit is contained in:
Adam Coddington 2013-07-25 18:45:22 -07:00
commit 9954b74eae
2 changed files with 57 additions and 20 deletions

View file

@ -44,16 +44,23 @@ class MessageAttachmentInline(admin.TabularInline):
model = MessageAttachment
extra = 0
default_charset = 'ASCII'
import email.header
def decode(m):
return ''.join([ unicode(t[0], t[1] or default_charset) for t in email.header.decode_header(m) ])
class MessageAdmin(admin.ModelAdmin):
def attachment_count(self, msg):
return msg.attachments.count()
def Subject(self, msg):
return decode(msg.subject)
inlines = [
MessageAttachmentInline,
]
list_display = (
'subject',
'Subject',
'processed',
'read',
'mailbox',

View file

@ -6,6 +6,7 @@ import urllib
import mimetypes
import os.path
from quopri import encode as encode_quopri
from quopri import decodestring as decodestring_quopri
import sys
import uuid
@ -24,6 +25,7 @@ from django_mailbox.transports import Pop3Transport, ImapTransport,\
from django_mailbox.signals import message_received
import six
STRIP_UNALLOWED_MIMETYPES = getattr(
settings,
'DJANGO_MAILBOX_STRIP_UNALLOWED_MIMETYPES',
@ -246,13 +248,17 @@ class Mailbox(models.Model):
def _process_message(self, message):
msg = Message()
msg.mailbox = self
msg.subject = message['subject'][0:255]
msg.message_id = message['message-id'][0:255]
msg.from_header = message['from']
msg.to_header = message['to']
if 'subject' in message:
msg.subject = message['subject'][0:255]
if 'message-id' in message:
msg.message_id = message['message-id'][0:255]
if 'from' in message:
msg.from_header = message['from']
if 'to' in message:
msg.to_header = message['to']
msg.save()
message = self._get_dehydrated_message(message, msg)
msg.body = message.as_string()
msg.body = unicode(message.as_string(),errors='ignore')
if message['in-reply-to']:
try:
msg.in_reply_to = Message.objects.filter(
@ -347,24 +353,27 @@ class Message(models.Model):
separate fields.
"""
if self.outgoing:
return self.to_addresses()
else:
return self.from_addresses()
addresses = []
addresses = self.to_addresses + self.from_address
return addresses
@property
def from_address(self):
return parseaddr(self.from_header)[1]
if self.from_header:
return [parseaddr(self.from_header)[1].lower()]
else:
return []
@property
def to_addresses(self):
addresses = []
for address in self.to_header.split(','):
addresses.append(
parseaddr(
address
)[1]
)
if address:
addresses.append(
parseaddr(
address
)[1].lower()
)
return addresses
def reply(self, message):
@ -397,12 +406,21 @@ class Message(models.Model):
def get_text_body(self):
def get_body_from_message(message):
body = ''
charset = 'ascii'
for part in message.walk():
if (
part.get_content_maintype() == 'text'
and part.get_content_subtype() == 'plain'
):
body = body + part.get_payload()
# body = body + part.get_payload()
if part.get_content_charset():
charset = part.get_content_charset()
encoding = part['Content-Transfer-Encoding']
# print encoding
if encoding and encoding.lower() == 'base64':
body = body + unicode(part.get_payload().decode('base64'), charset)
else:
body = body + unicode(decodestring_quopri(part.get_payload()), charset)
return body
return get_body_from_message(
@ -532,13 +550,25 @@ class MessageAttachment(models.Model):
self._set_dehydrated_headers(rehydrated)
def get_filename(self):
return self._get_rehydrated_headers().get_filename()
file_name = self._get_rehydrated_headers().get_filename()
if file_name:
try:
d_subject = email.Header.decode_header(file_name)
except UnicodeEncodeError, e:
print e
return file_name
if d_subject[0][1]:
return unicode(d_subject[0][0], d_subject[0][1])
else:
return d_subject[0][0]
else:
return ''
def items(self):
return self._get_rehydrated_headers().items()
def __getitem__(self, name):
return self._get_rehydrated_headers()[name]
# def __getitem__(self, name):
# return self._get_rehydrated_headers()[name]
def __unicode__(self):
return self.document.url