Проблема с smtplib, отправляющим почту с символами unicode в Python 3.1
Привет, у меня возникла проблема с сообщениями в unicode, когда я пытаюсь отправить слова на испанском языке, например: "Añadir" или другие сбой системы, я попробую, что говорит по этой ссылке: Python 3 smtplib отправляет с символами unicode и не работает.
Это код моей ошибки:
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' не может кодировать символ '\ xf1' в позиции 7: порядковый номер не в диапазоне (128)
Это код на сервере:
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()
Спасибо заранее.
Ответы
Ответ 1
Вместо этого вы можете просто использовать:
msg = MIMEText(message, _charset="UTF-8")
msg['Subject'] = Header(subject, "utf-8")
Но в любом случае у вас все еще есть проблемы, если ваши frm = "[email protected]"
или to = "[email protected]"
содержат символы Unicode. Вы не можете использовать заголовок.
Ответ 2
Я решил это, решение таково:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
frm = "[email protected]"
msg = MIMEMultipart('alternative')
msg.set_charset('utf8')
msg['FROM'] = frm
bodyStr = ''
to = "[email protected]"
#This solved the problem with the encode on the subject.
msg['Subject'] = Header(
body.getAttribute('subject').encode('utf-8'),
'UTF-8'
).encode()
msg['To'] = to
# And this on the body
_attach = MIMEText(bodyStr.encode('utf-8'), 'html', 'UTF-8')
msg.attach(_attach)
server.sendmail(frm, to, msg.as_string())
server.quit()
Надеюсь, это поможет!
Спасибо!
Ответ 3
Я нашел очень простой обходной путь здесь (https://bugs.python.org/issue25736):
msg = '''your message with umlauts and characters here : <<|""<<>> ->ÄÄ">ÖÖÄÅ"#¤<%&<€€€'''
server.sendmail(mailfrom, rcptto, msg.encode("utf8"))
server.quit()
Итак, чтобы правильно кодировать эти символы Юникода, добавьте
msg.encode("utf8")
в конце команды sendmail.