我正在尝试编写一个脚本,从网站上删除一些文本,然后通过电子邮件将所述文本发送给我。
除了编码之外,所有这些都按预期工作。该电子邮件包含以下行:
显然,“???”应该是撇号。我不太熟悉编码如何工作的复杂性,特别是当它涉及电子邮件时,所以任何帮助将不胜感激。我脚本的相关部分如下:我们说,嗯,现在已经全部结束了;
是什么?
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddrs
msg['Subject'] = "Daily Utmost Devo"
# webtext, cleanverse, & cleanlink are all <type 'unicode'> at this point
body = webtext.encode('utf-8')
bodyverse = cleanverse.encode('utf-8')
bodylink = cleanlink.encode('utf-8')
msg.attach(MIMEText(body, 'plain'))
msg.attach(MIMEText(bodyverse, 'plain'))
msg.attach(MIMEText(bodylink, 'plain'))
username = 'xxxxx@gmail.com'
password = 'xxxxx'
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
text = msg.as_string()
server.sendmail(fromaddr, toaddrs, text)
server.quit()
答案 0 :(得分:0)
MimeText需要_charset
参数:
class email.mime.text.MIMEText(_text [,_ subtype [,_ charset]])
模块:email.mime.text
MIMENonMultipart的子类,MIMEText类用于创建 主要类型文本的MIME对象。 _text是有效负载的字符串。 _subtype是次要类型,默认为plain。 _charset是文本的字符集,并作为参数传递给 MIMENonMultipart构造函数;它默认为us-ascii。如果_text是 unicode,使用_charset的output_charset编码,否则 它按原样使用。
版本2.4中已更改:先前已弃用的_encoding参数 已被删除。内容传输编码现在隐式发生 基于_charset论证。
除非_charset参数显式设置为None,否则为MIMEText 创建的对象将具有带字符集的Content-Type标头 参数和Content-Transfer-Endcoding标头。这意味着一个 后续的set_payload调用不会产生编码的有效负载, 即使在set_payload命令中传递了一个charset。您可以 通过删除Content-Transfer-Encoding来“重置”此行为 标头,之后set_payload调用将自动编码 新的有效负载(并添加一个新的Content-Transfer-Encoding标头)。
所以试试
msg.attach(MIMEText(body, 'plain', 'utf-8'))
msg.attach(MIMEText(bodyverse, 'plain', 'utf-8'))
msg.attach(MIMEText(bodylink, 'plain', 'utf-8'))
编辑另请参阅这些帖子
MIMEText UTF-8 encode problems when sending email