How to send utf-8 mail in Python 3?

Peter Kleiweg p.c.j.kleiweg at
Fri Mar 5 22:34:00 CET 2010

I try to send e-mail from Python 3.1.1

Encoding as iso-8859-1 goes fine.
But encoding as utf-8 doesn't work.
What am I doing wrong?

Python 3.1.1 (r311:74480, Oct  2 2009, 11:50:52) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from email.mime.text import MIMEText
>>> text = 'H\u00e9'
>>> msg = MIMEText(text, 'plain', 'iso-8859-1')
>>> print(msg.as_string())
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

>>> msg = MIMEText(text, 'plain', 'utf-8')
Traceback (most recent call last):
  File "/my/opt/Python-3/lib/python3.1/email/", line 269, in set_charset
TypeError: 'str' object is not callable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/my/opt/Python-3/lib/python3.1/email/mime/", line 30, in __init__
    self.set_payload(_text, _charset)
  File "/my/opt/Python-3/lib/python3.1/email/", line 234, in set_payload
  File "/my/opt/Python-3/lib/python3.1/email/", line 271, in set_charset
    self._payload = charset.body_encode(self._payload)
  File "/my/opt/Python-3/lib/python3.1/email/", line 380, in body_encode
    return email.base64mime.body_encode(string)
  File "/my/opt/Python-3/lib/python3.1/email/", line 94, in body_encode
    enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii")
TypeError: must be bytes or buffer, not str

Peter Kleiweg

More information about the Python-list mailing list