Issue with smtplib sending mail with unicode characters in Python 3.1

hidura picture hidura · Nov 30, 2011 · Viewed 20.4k times · Source

Hello i' ve this problem with unicode emails, when i try to send words in spanish like: "Añadir" or others the system collapse, i've try what says on this link: Python 3 smtplib send with unicode characters and doesn't work.

This is the code of my error:

server.sendmail(frm, to, msg.as_string())
g.flatten(self, unixfrom=unixfrom)
self._write(msg)
self._write_headers(msg)
header_name=h)
self.append(s, charset, errors)
input_bytes = s.encode(input_charset, errors)

UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 7: ordinal not in range(128)

This is the code on the server:

msg = MIMEMultipart('alternative')
frm = "[email protected]"
msg['FROM'] = frm

to = "[email protected]"
msg['To'] = to
msg['Subject'] = "Favor añadir esta empresa a la lista"

_attach = MIMEText("""Nombre:Prueba; Dirección:Calle A #12.""".encode('utf-8'), _charset='utf-8')
msg.attach(_attach)

server.sendmail(frm, to, msg.as_string())

server.quit()

Thanks in advance.

Answer

Kev picture Kev · Jun 19, 2012

You can instead just use:

msg = MIMEText(message, _charset="UTF-8")
msg['Subject'] = Header(subject, "utf-8")

But either way you still have issues if your frm = "[email protected]" or to = "[email protected]" constains unicode characters. You can't use Header there.