MIMEText UTF-8发送电子邮件时编码问题 [英] MIMEText UTF-8 encode problems when sending email

查看:1283
本文介绍了MIMEText UTF-8发送电子邮件时编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是发送电子邮件的代码的一部分:

Here is a part of my code which sends an email:

servidor = smtplib.SMTP()
servidor.connect(HOST, PORT)
servidor.login(user, usenha)
assunto = str(self.lineEdit.text())
para = str(globe_email)             
texto = self.textEdit.toPlainText()
textos = str(texto)
corpo = MIMEText(textos.encode('utf-8'), _charset='utf-8')
corpo['From'] = user
corpo['To'] = para
corpo['Subject'] = assunto
servidor.sendmail(user, [para], corpo.as_string())

除主题的一部分外,一切都OK。
当我尝试发送带有特殊字符的字符串(例如ação)时,会引发此错误:

Everything is ok except the part of the Subject. When I try to send a string with special characters (e.g. "ação") it raises this error:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)

如何在MIMEText主题中发送带有特殊字符的邮件?

How can I send emails with special characters in the Subject of MIMEText?

推荐答案

看来,在python3中, a href =http://docs.python.org/py3k/library/email.header.html#email.header.Header> 标题 对象需要将主题编码为utf-8:

It seems that, in python3, a Header object is needed to encode a Subject as "utf-8":

>>> from email.mime.text import MIMEText
>>> from email.header import Header
>>> s = 'ação'
>>> m = MIMEText(s.encode('utf-8'), 'plain', 'utf-8')
>>> m['Subject'] = Header(s, 'utf-8')
>>> m.as_string()
'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: base64\nSubject: =?utf-8?b?YcOnw6Nv?=\n\nYcOnw6Nv\n'

所以原始脚本将成为:

servidor = smtplib.SMTP()
servidor.connect(HOST, PORT)
servidor.login(user, usenha)
assunto = str(self.lineEdit.text())
para = str(globe_email)             
texto = str(self.textEdit.toPlainText())
corpo = MIMEText(texto.encode('utf-8'), 'plain', 'utf-8')
corpo['From'] = user
corpo['To'] = para
corpo['Subject'] = Header(assunto, 'utf-8')
servidor.sendmail(user, [para], corpo.as_string())

这篇关于MIMEText UTF-8发送电子邮件时编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆