1
1
import copy
2
+ import base64
3
+ from email .mime .base import MIMEBase
2
4
3
5
from django .conf import settings
4
6
from django .core .mail import EmailMultiAlternatives , EmailMessage
@@ -31,7 +33,7 @@ def email_to_dict(message):
31
33
'to' : message .to ,
32
34
'bcc' : message .bcc ,
33
35
# ignore connection
34
- 'attachments' : message . attachments ,
36
+ 'attachments' : [] ,
35
37
'headers' : message .extra_headers ,
36
38
'cc' : message .cc }
37
39
@@ -47,6 +49,17 @@ def email_to_dict(message):
47
49
if message .mixed_subtype != EmailMessage .mixed_subtype :
48
50
message_dict ["mixed_subtype" ] = message .mixed_subtype
49
51
52
+ attachments = message .attachments
53
+ for attachment in attachments :
54
+ if isinstance (attachment , MIMEBase ):
55
+ filename = attachment .get_filename ('' )
56
+ binary_contents = attachment .get_payload (decode = True )
57
+ mimetype = attachment .get_content_type ()
58
+ else :
59
+ filename , binary_contents , mimetype = attachment
60
+ contents = base64 .b64encode (binary_contents ).decode ('ascii' )
61
+ message_dict ['attachments' ].append ((filename , contents , mimetype ))
62
+
50
63
if settings .CELERY_EMAIL_MESSAGE_EXTRA_ATTRIBUTES :
51
64
for attr in settings .CELERY_EMAIL_MESSAGE_EXTRA_ATTRIBUTES :
52
65
if hasattr (message , attr ):
@@ -62,6 +75,13 @@ def dict_to_email(messagedict):
62
75
for attr in settings .CELERY_EMAIL_MESSAGE_EXTRA_ATTRIBUTES :
63
76
if attr in messagedict :
64
77
extra_attrs [attr ] = messagedict .pop (attr )
78
+ attachments = messagedict .pop ('attachments' )
79
+ messagedict ['attachments' ] = []
80
+ for attachment in attachments :
81
+ filename , contents , mimetype = attachment
82
+ binary_contents = base64 .b64decode (contents .encode ('ascii' ))
83
+ messagedict ['attachments' ].append (
84
+ (filename , binary_contents , mimetype ))
65
85
if isinstance (messagedict , dict ) and "content_subtype" in messagedict :
66
86
content_subtype = messagedict ["content_subtype" ]
67
87
del messagedict ["content_subtype" ]
0 commit comments