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.
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:35 | admin | set | github: 59967 |
| 2012年08月22日 14:46:39 | r.david.murray | set | status: open -> closed resolution: works for me messages: + msg168888 stage: resolved |
| 2012年08月22日 11:28:07 | HWJ | create | |