email with a non-ascii charset in Python3 ?
Helmut Jarausch
jarausch at skynet.be
Wed Aug 15 10:04:51 EDT 2012
On Wed, 15 Aug 2012 14:48:40 +0200, Christian Heimes wrote:
> Am 15.08.2012 14:16, schrieb Helmut Jarausch:
>> Hi,
>>
>> I'm sorry to ask such a FAQ but still I couldn't find an answer -
>> neither in the docs nor the web.
>>
>> What's wrong with the following script?
>>
>> Many thanks for a hint,
>> Helmut.
>>
>> #!/usr/bin/python3 #_*_ coding: latin1 _*_
>>
>> import smtplib from email.message import Message import datetime
>>
>> msg= Message()
>> msg.set_charset('latin-1')
>> msg['Subject'] = "*** Email Test ***"
>> msg['From'] = "Email_Tester at numa-sv.igpm.rwth-aachen.de"
>> msg['To'] = "jarausch at igpm.rwth-aachen.de"
>> msg['Date'] = datetime.datetime.utcnow().strftime('%m/%d/%Y %I:%M:%S
>> %p')
>>
>> server= smtplib.SMTP("igpm.igpm.rwth-aachen.de")
>> msg.set_payload("Gedanken über einen Test","iso-8859-1")
>
> You mustn't combine set_charset() with set_payload() with a charset.
> That results into invalid output:
>
>>>> msg = Message()
>>>> msg.set_payload("Gedanken über einen Test", "iso-8859-1")
>>>> msg.as_string()
> 'MIME-Version: 1.0\nContent-Type: text/plain;
> charset="iso-8859-1"\nContent-Transfer-Encoding:
> quoted-printable\n\nGedanken =FCber einen Test'
>
>>>> msg2 = Message()
>>>> msg2.set_charset("iso-8859-1")
>>>> msg2.set_payload("Gedanken über einen Test", "iso-8859-1")
>>>> msg2.as_string()
> 'MIME-Version: 1.0\nContent-Type: text/plain;
> charset="iso-8859-1"\nContent-Transfer-Encoding:
> quoted-printable\n\nGedanken über einen Test'
>
Thanks!
Just, one mustn't use
server.send_message(msg.as_string())
But what if msg['From'] contains a non-ASCII character?
I wonder what the usage of msg.set_charset('latin-1') is.
With
msg.set_charset('latin-1')
msg.set_payload("Gedanken über einen Test") # is accepted BUT
server.send_message(msg)
gives
Traceback (most recent call last):
File "Test_EMail_Py3_2.py", line 21, in <module>
server.send_message(msg)
File "/usr/lib64/python3.2/smtplib.py", line 812, in send_message
g.flatten(msg_copy, linesep='\r\n')
File "/usr/lib64/python3.2/email/generator.py", line 91, in flatten
self._write(msg)
File "/usr/lib64/python3.2/email/generator.py", line 137, in _write
self._dispatch(msg)
File "/usr/lib64/python3.2/email/generator.py", line 163, in _dispatch
meth(msg)
File "/usr/lib64/python3.2/email/generator.py", line 396, in
_handle_text
super(BytesGenerator,self)._handle_text(msg)
File "/usr/lib64/python3.2/email/generator.py", line 201, in
_handle_text
self.write(payload)
File "/usr/lib64/python3.2/email/generator.py", line 357, in write
self._fp.write(s.encode('ascii', 'surrogateescape'))
UnicodeEncodeError: 'ascii' codec can't encode character '\xfc' in
position 9: ordinal not in range(128)
Helmut.
More information about the Python-list
mailing list