【问题标题】:emails as email.Message class objects in Python电子邮件作为 Python 中的 email.Message 类对象
【发布时间】:2009-11-04 16:25:48
【问题描述】:

如何使用 poplib,并从 Python 中的 email 模块的 email.Message 类下载邮件作为消息实例?

我正在编写一个程序,它会分析所有电子邮件中的特定信息,并将部分消息存储到数据库中。我可以将整个邮件作为文本下载,但是通过文本搜索附件很困难。

想法是解析消息以获取信息

【问题讨论】:

  • 您是否还需要解析附件(至少是文本类型的附件),寻找“特定信息”?
  • 是的!这是一个目标。但是我需要一种扫描主要内容的方法!

标签: python email parsing pop3


【解决方案1】:

使用email.feedparser 模块中的FeedParser 类从带有poplib 的服务器读取的消息中构造一个email.Message 对象。

具体来说:

import poplib
import email

pop = poplib.POP3( "server..." )
[establish connection, authenticate, ...]
raw = pop.retr( 1 )
pop.close()

parser = email.parser.FeedParser()
for line in raw[1]:
    parser.feed( str( line+b'\n', 'us-ascii' ) )
message = parser.close()

【讨论】:

  • 你可以使用BytesFeedParser来省去你转换成str的麻烦(它也使用了surrogateescape模式以免中断无效字符)
【解决方案2】:

不像 Adrien Plisson 的回答那样处理字符集问题。

import poplib
import email

pop = poplib.POP3( "server..." )
[establish connection, authenticate, ...]
raw = pop.retr( 1 )
pop.close()

message = email.message_from_string('\n'.join(raw[1]))

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2020-06-18
    • 1970-01-01
    • 2014-01-11
    • 2021-10-31
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多