Skip to content

Commit 3eb4bf3

Browse files
committed
Encode address only when not ascii
1 parent 5de0d97 commit 3eb4bf3

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

emails/message.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ def __init__(self,
4040
text=None,
4141
attachments=None,
4242
cc=None,
43-
bcc=None):
43+
bcc=None,
44+
headers_encoding=None):
4445

4546
self._attachments = None
46-
self.charset = charset or 'utf-8' # utf-8 is standard de-facto, yeah
47+
self.charset = charset or 'utf-8'
48+
self.headers_encoding = headers_encoding or 'ascii'
4749
self._message_id = message_id
4850
self.set_subject(subject)
4951
self.set_date(date)
@@ -227,7 +229,7 @@ def set_header(self, msg, key, value, encode=True):
227229
raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (value, key))
228230

229231
if key.lower() in self.ADDRESS_HEADERS:
230-
value = ', '.join(sanitize_address(addr, self.charset)
232+
value = ', '.join(sanitize_address(addr, self.headers_encoding)
231233
for addr in getaddresses((value,)))
232234

233235
msg[key] = encode and self.encode_header(value) or value

emails/testsuite/message/test_message.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,23 @@ def test_headers_not_double_encoded():
113113
assert decode_header(msg['Subject']) == TEXT
114114

115115

116+
def test_headers_ascii_encoded():
117+
"""
118+
Test we encode To/From header only when it not-ascii
119+
"""
120+
121+
for text, encoded in (
122+
('웃', '=?utf-8?b?7JuD?='),
123+
('ascii text', 'ascii text'),
124+
):
125+
msg = Message(mail_from=(text, 'a@b.c'),
126+
mail_to=(text, 'a@b.c'),
127+
subject=text,
128+
html='...').as_message()
129+
assert parseaddr(msg['From'])[0] == encoded
130+
assert parseaddr(msg['To'])[0] == encoded
131+
132+
116133
def test_message_addresses():
117134

118135
m = Message()

0 commit comments

Comments
 (0)