将提取的BeautifulSoup文本编码为电子邮件

时间:2014-02-19 01:59:03

标签: python email encoding beautifulsoup

我正在尝试编写一个脚本,从网站上删除一些文本,然后通过电子邮件将所述文本发送给我。

除了编码之外,所有这些都按预期工作。该电子邮件包含以下行:

  

我们说,嗯,现在已经全部结束了;

是什么?
显然,“???”应该是撇号。我不太熟悉编码如何工作的复杂性,特别是当它涉及电子邮件时,所以任何帮助将不胜感激。我脚本的相关部分如下:

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()

1 个答案:

答案 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

Python - How to send utf-8 e-mail?

Encoding of headers in MIMEText