Opened 4 months ago
Last modified 3 months ago
#35713 assigned Bug
Django generates invalid address on unicode characters in the local part of an e-mail address — at Initial Version
Reported by: | Mike Edmunds | Owned by: | |
---|---|---|---|
Component: | Core (Mail) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
#25986 attempted to add support for non-ASCII characters in the local-part (username) of an email address, by encoding it as an RFC 2047 encoded-word. PR#6377 landed in Django 1.10.
However, RFC 2047 specifically prohibits using an encoded-word in an addr-spec (the username@domain portion of an email address). Encoded-words are only allowed in address display-names.
The resulting email address is not supported by any known MTA or email client, and the message will either bounce or just disappear undelivered.
To reproduce:
from django.core.mail import EmailMessage email = EmailMessage(to=["jörg@example.no"]) print(email.message().as_bytes().decode()) # examine generated message # ... # To: =?utf-8?b?asO2cmc=?=@example.no # ... email.send() # if you've set up a mailbox for jörg at example.no
Actual results: as above (no errors)
Expected results: no =?utf-8?...
encoded-word in the generated To addr-spec. And an error on the call to send()
(or message()
) saying that a non-ASCII local-part is not supported.
There is no supported way to send to non-ASCII usernames using 7-bit email headers. That requires using 8-bit headers with the SMTPUTF8 extension under RFC 6530/6531/6532. (I'll open a separate feature request ticket about that; this ticket is solely about removing the current buggy behavior.)
For more details see #25986 comments 12-13.