相关疑难解决方法(0)

如何使用Python获取电子邮件的文本内容?

鉴于Python 2.6中的RFC822消息,我如何获得正确的文本/纯文本内容部分?基本上,我想要的算法是这样的:

message = email.message_from_string(raw_message)
if has_mime_part(message, "text/plain"):
    mime_part = get_mime_part(message, "text/plain")
    text_content = decode_mime_part(mime_part)
elif has_mime_part(message, "text/html"):
    mime_part = get_mime_part(message, "text/html")
    html = decode_mime_part(mime_part)
    text_content = render_html_to_plaintext(html)
else:
    # fallback
    text_content = str(message)
return text_content
Run Code Online (Sandbox Code Playgroud)

这些事,我get_mime_parthas_mime_part拍下来,但我不太清楚如何从MIME部分解码的文本.我可以使用编码文本get_payload(),但如果我尝试使用方法的decode参数get_payload()(请参阅doc),当我在text/plain部分调用它时会出现错误:

File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/
email/message.py", line 189, in get_payload
    raise TypeError('Expected list, got %s' % type(self._payload))
TypeError: Expected list, got <type 'str'>
Run Code Online (Sandbox Code Playgroud)

另外,我不知道如何使用HTML并尽可能地将其呈现为文本.

python email mime rfc822

36
推荐指数
1
解决办法
5万
查看次数

如何在python中使用imaplib获取电子邮件正文?

我想从IMAP4服务器获取整个消息.在python docs中,如果发现这段代码有效:

>>> t, data = M.fetch('1', '(RFC822)')
>>> body = data[0][1]
Run Code Online (Sandbox Code Playgroud)

我想知道我是否总能相信数据[0] [1]返回消息正文.当我运行'RFC822.SIZE'时,我只有一个字符串而不是一个元组.

我已经浏览了rfc1730,但我无法找出'RFC822'的正确响应结构.从imaplib文档中判断获取结果结构也很困难.

这是我在获取时获得的内容RFC822:

('OK', [('1 (RFC822 {858569}', 'body of the message', ')')])
Run Code Online (Sandbox Code Playgroud)

但当RFC822.SIZE我拿到我的时候:

('OK', ['1 (RFC822.SIZE 847403)'])
Run Code Online (Sandbox Code Playgroud)

我该如何正确处理数据[0]列表?我可以相信,当它是一个元组列表时,元组恰好有3个部分而第二部分是有效负载吗?

也许你知道imap4的更好的库?

python imaplib

22
推荐指数
3
解决办法
5万
查看次数

标签 统计

python ×2

email ×1

imaplib ×1

mime ×1

rfc822 ×1