#32806: Send email with a content_type=text/* attachment
-----------------------------------------+---------------------------------
Reporter: tzot | Owner: nobody
Type: Uncategorized | Status: new
Component: Core (Mail) | Version: 3.2
Severity: Normal | Keywords: text attachment
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+---------------------------------
Python 3.8, Django 3.2.3
{{{
from django.core.mail import EmailMessage
e = EmailMessage('subject', 'the body', '[email protected]',
['[email protected]'])
e.attach('attachment.csv', 'flda,fldb\nvala,valb\n', 'text/csv')
e.send()
}}}
This fails as expected:
{{{
…
File "…/lib/python3.8/site-packages/sgbackend/mail.py", line 149, in
_build_sg_mail
base64_attachment = base64.b64encode(attachment[1])
File "…/lib/python3.8/base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
}}}
But this also fails:
{{{
e.attach('attachment.csv', b'flda,fldb\nvala,valb\n', 'text/csv')
e.send()
}}}
because …/lib/python3.8/site-packages/django/core/mail/message.py on
attach does:
{{{
if basetype == 'text':
if isinstance(content, bytes):
try:
content = content.decode()
except UnicodeDecodeError:
# If mimetype suggests the file is text but it's
# actually binary, read() raises a
UnicodeDecodeError.
mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
self.attachments.append((filename, content, mimetype))
}}}
Why decode it if a Py3 string can't be b64encoded? I think that actually
it should be *encoded* as bytes if already str using the DEFAULT_CHARSET
before appending the tuple to self.attachments.
If I .attach(name, bytes_object, 'application/csv') then the send
operation works fine.
(I'm open to the possibility that I miss something and this is not a bug
:) )
I can provide a patch if we decide upon the correct behaviour, but please
let me know the target branch.
--
Ticket URL: <https://code.djangoproject.com/ticket/32806>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/047.b7750570777eba2cb4f2a7dec2dc083c%40djangoproject.com.