﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35497	Long email address causes crash when generating a message	Alexandru Chirila	Clinton Christian	"Trying to generate an email message that has a long recipient address and non-ASCII characters causes a crash.

How to reproduce:

{{{
EmailMessage(to=[""ţēśţ."" * 6 + ""@example.com""]).message()
}}}

Looking for an existing issue I have found #31784. It seems like the issue there was only fixed for long names and long addresses.

----

Version info:

- Django: 5.0.6
- Python: 3.12.3

----

Full log:

{{{#!python
In [2]: from django.core.mail import EmailMessage

In [3]: EmailMessage(to=[""ţēśţ."" * 6 + ""@example.com""]).message()
---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
File .venv/lib/python3.12/site-packages/django/core/mail/message.py:64, in forbid_multi_line_headers(name, val, encoding)
     63 try:
---> 64     val.encode(""ascii"")
     65 except UnicodeEncodeError:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
Cell In[3], line 1
----> 1 EmailMessage(to=[""ţēśţ."" * 6 + ""@example.com""]).message()

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:267, in EmailMessage.message(self)
    265 msg[""Subject""] = self.subject
    266 msg[""From""] = self.extra_headers.get(""From"", self.from_email)
--> 267 self._set_list_header_if_not_empty(msg, ""To"", self.to)
    268 self._set_list_header_if_not_empty(msg, ""Cc"", self.cc)
    269 self._set_list_header_if_not_empty(msg, ""Reply-To"", self.reply_to)

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:432, in EmailMessage._set_list_header_if_not_empty(self, msg, header, values)
    430 except KeyError:
    431     value = "", "".join(str(v) for v in values)
--> 432 msg[header] = value

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:165, in SafeMIMEText.__setitem__(self, name, val)
    164 def __setitem__(self, name, val):
--> 165     name, val = forbid_multi_line_headers(name, val, self.encoding)
    166     MIMEText.__setitem__(self, name, val)

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:67, in forbid_multi_line_headers(name, val, encoding)
     65 except UnicodeEncodeError:
     66     if name.lower() in ADDRESS_HEADERS:
---> 67         val = "", "".join(
     68             sanitize_address(addr, encoding) for addr in getaddresses((val,))
     69         )
     70     else:
     71         val = Header(val, encoding).encode()

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:68, in <genexpr>(.0)
     65 except UnicodeEncodeError:
     66     if name.lower() in ADDRESS_HEADERS:
     67         val = "", "".join(
---> 68             sanitize_address(addr, encoding) for addr in getaddresses((val,))
     69         )
     70     else:
     71         val = Header(val, encoding).encode()

File .venv/lib/python3.12/site-packages/django/core/mail/message.py:120, in sanitize_address(addr, encoding)
    117     localpart = Header(localpart, encoding).encode()
    118 domain = punycode(domain)
--> 120 parsed_address = Address(username=localpart, domain=domain)
    121 return formataddr((nm, parsed_address.addr_spec))

File ~/.pyenv/versions/3.12.3/lib/python3.12/email/headerregistry.py:33, in Address.__init__(self, display_name, username, domain, addr_spec)
     31 inputs = ''.join(filter(None, (display_name, username, domain, addr_spec)))
     32 if '\r' in inputs or '\n' in inputs:
---> 33     raise ValueError(""invalid arguments; address parts cannot contain CR or LF"")
     35 # This clause with its potential 'raise' may only happen when an
     36 # application program creates an Address object using an addr_spec
     37 # keyword.  The email library code itself must always supply username
     38 # and domain.
     39 if addr_spec is not None:

ValueError: invalid arguments; address parts cannot contain CR or LF
}}}
"	Bug	closed	Core (Mail)	5.0	Normal	wontfix	email	Florian Apolloner Mike Edmunds	Accepted	1	0	0	1	0	0
