Opened 3 weeks ago

Last modified 9 days ago

#35713 assigned Bug

Django generates invalid address on unicode characters in the local part of an e-mail address — at Version 3

Reported by: Mike Edmunds Owned by: YashRaj1506
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 (last modified by Mike Edmunds)

#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. (That new feature request is ticket #35714; this ticket is solely about removing the current buggy behavior.)

For more details see #25986 comments 12-13.

Change History (3)

comment:1 by Claude Paroz, 3 weeks ago

Triage Stage: UnreviewedAccepted
Version: 5.0dev

Looks legitimate.

comment:2 by YashRaj1506, 3 weeks ago

Owner: set to YashRaj1506
Status: newassigned

comment:3 by Mike Edmunds, 2 weeks ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top