-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
email non-ASCII characters in TO or FROM field doesn't work #59967
Comments
Trying to generate an email with Latin-1 characters in the TO or FROM Using Python 3.2.3+ (3.2:481f5d9ef577+, Aug 8 2012, 10:00:28) #!/usr/bin/python3 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 .. # The following doesn't crash Python but generates a strange "From" string : msg['From'] = FromAddr = "Günter Groß <Email_Tester@numa-sv.igpm.rwth-aachen.de>" # The same with this one 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() |
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> |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: