jon*_*epp 16 python email unicode utf-8 python-3.x
以下是我的代码的一部分,它发送了一封电子邮件:
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())
Run Code Online (Sandbox Code Playgroud)
除了主题部分外,一切都很好.当我尝试发送带有特殊字符的字符串(例如"ação")时,会引发此错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
如何在MIMEText的主题中发送带有特殊字符的电子邮件?
ekh*_*oro 43
看来,在python3中,Header需要一个对象来编码Subject为"utf-8":
# -*- coding: utf-8 -*-
from email.mime.text import MIMEText
from email.header import Header
s = 'ação'
m = MIMEText(s, 'plain', 'utf-8')
m['Subject'] = Header(s, 'utf-8')
print(repr(m.as_string()))
Run Code Online (Sandbox Code Playgroud)
所以原始脚本将成为:
'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: base64\nSubject: =?utf-8?b?YcOnw6Nv?=\n\nYcOnw6Nv\n
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27401 次 |
| 最近记录: |