homepage

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

AltStyle によって変換されたページ (->オリジナル) /