This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: email non-ASCII characters in TO or FROM field doesn't work
Type: Stage: resolved
Components: email Versions: Python 3.2
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: Nosy List: HWJ, barry, r.david.murray
Priority: normal Keywords:

Created on 2012-08-22 11:28 by HWJ, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (2)
msg168869 - (view) Author: Helmut Jarausch (HWJ) Date: 2012-08-22 11:28
Trying to generate an email with Latin-1 characters in the TO or FROM
field either produces an exception or produces strange values in the generated email:

Using  Python 3.2.3+ (3.2:481f5d9ef577+, Aug  8 2012, 10:00:28) 


#!/usr/bin/python3
#-*- coding: latin1 -*-

import smtplib
from email.message import Message
import datetime
import sys

msg= Message()
msg.set_charset('latin-1')
msg['Subject'] = "*** Email Test ***"

# the following gives a  UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc ..
# in File "/usr/lib64/python3.2/email/header.py", line 281, in append
# msg['From'] = FromAddr = "Günter Groß <Email_Tester@numa-sv.igpm.rwth-aachen.de>".encode('iso-8859-1')


# The following doesn't crash Python but generates a strange "From" string :
# =?utf-8?b?R8O8bnRlciBHcm/DnyA8RW1haWxfVGVzdGVyQG51bWEtc3YuaWdwbS5yd3RoLWFhY2hlbi5kZT4=?=

msg['From'] = FromAddr = "Günter Groß <Email_Tester@numa-sv.igpm.rwth-aachen.de>"


# The same with this one
msg['To']   = ToAddr   = "Günter Weiße <jarausch@igpm.rwth-aachen.de>"

DATE = datetime.datetime.utcnow().strftime('%m/%d/%Y %I:%M:%S %p')
msg['Date'] = datetime.datetime.utcnow().strftime('%m/%d/%Y %I:%M:%S %p')

server= smtplib.SMTP("igpm.igpm.rwth-aachen.de")
# server= smtplib.SMTP('relay.skynet.be')
server.set_debuglevel(9)

msg.set_payload("Gedanken über einen Test","iso-8859-1")
# server.send_message(msg)
server.sendmail(FromAddr,ToAddr,msg.as_string().encode("iso-8859-1"))
server.quit()
msg168888 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2012-08-22 14:46
Doing non-ASCII email in python before 3.3 is a bit of a pain and not as well documented as it should be.  3.3 will work more like you expect, if you use the new provisional policies (which are intended to become standard in 3.4, after a the bake-in period in 3.3).

For 3.2, you need to handle encoding addresses using utils.formataddr and header.Header:

>>> h = Header(header_name='Sender')
>>> h.append("Éric", 'latin-1')
>>> h.append('<eric@example.com>')
>>> h.encode()
'=?iso-8859-1?q?=C9ric?= <eric@example.com>'
>>> m = Message()
>>> m['Sender'] = h
>>> print(m)
Sender: =?iso-8859-1?q?=C9ric?= <eric@example.com>

In 3.3 this will work:

>>> m = Message()
>>> m['Sender'] = formataddr(('Éric', 'eric@example.com'))
>>> print(m)
Sender: =?iso-8859-1?q?=C9ric?= <eric@example.com>

But even better, so will this:

>>> m = Message(policy=policy.SMTP)
>>> m['From'] = "Günter Weiße <jarausch@igpm.rwth-aachen.de>"
>>> print(m)
From: =?utf-8?q?G=C3=BCnter_Wei=C3=9Fe?= <jarausch@igpm.rwth-aachen.de>
History
Date User Action Args
2022-04-11 14:57:35adminsetgithub: 59967
2012-08-22 14:46:39r.david.murraysetstatus: open -> closed
resolution: works for me
messages: + msg168888

stage: resolved
2012-08-22 11:28:07HWJcreate