Can someone explain to me why I can't set the charset after the fact and still have it work.
For example: >>> text = MIMEText('❤¥'.encode('utf-8'), 'html') >>> text.set_charset('utf-8') >>> text.as_string() Traceback (most recent call last): File "<pyshell#53>", line 1, in <module> text.as_string() File "C:\Python32\lib\email\message.py", line 168, in as_string g.flatten(self, unixfrom=unixfrom) File "C:\Python32\lib\email\generator.py", line 91, in flatten self._write(msg) File "C:\Python32\lib\email\generator.py", line 137, in _write self._dispatch(msg) File "C:\Python32\lib\email\generator.py", line 163, in _dispatch meth(msg) File "C:\Python32\lib\email\generator.py", line 192, in _handle_text raise TypeError('string payload expected: %s' % type(payload)) TypeError: string payload expected: <class 'bytes'> As opposed to: >>> text = MIMEText('❤¥'.encode('utf-8'), 'html', 'utf-8') >>> text.as_string() 'Content-Type: text/html; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: base64\n\n4p2kwqU=\n' Side question: >>> text = MIMEText('❤¥', 'html') >>> text.set_charset('utf-8') >>> text.as_string() 'MIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\nContent-Type: text/html; charset="utf-8"\n\n❤¥' Why is it now 8-bit encoding? -- http://mail.python.org/mailman/listinfo/python-list