#35378: Incorrect folding of long address headers with special characters when
using 7bit Content-Transfer-Encoding in EmailMessage
-----------------------------+------------------------------------
Reporter: andres | Owner: (none)
Type: Bug | Status: new
Component: Core (Mail) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-----------------------------+------------------------------------
Comment (by Mike Edmunds):
[I'm responsible for the example cited above. Setting an existing
message's `policy` attribute like that isn't documented anywhere, so
probably shouldn't be considered a valid test case. Apologies for that.]
I've come to the conclusion that any attempt to use modern
email.policy.default to serialize an email.message.Message (which is
constructed with legacy email.policy.compat32) is prone to errors, and
probably just isn't supported by the Python email package. Additional
information in https://github.com/anymail/django-
anymail/issues/369#issuecomment-2184252097
I would suggest ''not'' trying to fix this particular issue within Django.
Long term, there would be a lot of advantages to upgrading
django.core.mail to use modern email.message.EmailMessage (and
email.policy.default). But that's a separate issue, and I think needs to
happen all at once; trying to mix legacy and modern email code seems
problematic.
Here's an updated test, using only documented Python email package
features (generator policy override). It has the same problem, but I think
clarifies this is more of a Python email bug than a Django problem:
{{{#!python
import email.generator
import email.policy
import io
import django.core.mail
to = '"Người nhận a very very long, name" <[email protected]>'
mime_message = django.core.mail.EmailMessage(to=[to]).message()
fp = io.BytesIO()
g = email.generator.BytesGenerator(
fp,
policy=email.policy.default.clone(cte_type="7bit"),
)
g.flatten(mime_message)
print(fp.getvalue().decode("ascii"))
# [... other headers ...]
# To: =?utf-8?b?TmfGsOG7nWkgbmjhuq1u?= a very very long, name
<[email protected]>
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35378#comment:8>
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/0107019042822890-135be665-7d99-4a35-9799-2af499672ff7-000000%40eu-central-1.amazonses.com.