1
import getpass, poplib
user = 'my_user_name' 
Mailbox = poplib.POP3_SSL('pop-mail.outlook.com.com', '995') 
Mailbox.user(user) 
Mailbox.pass_('my_password') 
numMessages = len(Mailbox.list()[1])
for i in range(numMessages):
    for msg in Mailbox.retr(i+1)[1]:
        print msg
Mailbox.quit()

上面的代码来自 python POP3 文档,我使用了它并且它有效。但是,这并不是我真正想要的。我想阅读仅来自特定发件人地址的电子邮件。我在 python POP3 库中没有找到任何方法。任何人都可以帮忙吗?

4

1 回答 1

1

POP3 协议只允许:

  • 获取消息数量
  • 检索完整的消息
  • 删除消息

可选命令 (TOP msg n) 只允许读取消息的前 n 行。理论上,您可以使用它仅完全下载来自特定地址的消息。poplib 模块支持此命令,但手册说:

...不幸的是,在 RFC 中对 TOP 的规定很差,并且经常在非品牌服务器中被破坏。在信任它之前,针对您将使用的 POP3 服务器手动测试此方法。

我的建议是不要尝试使用它,它迟早会坏掉。如果您必须坚持使用 POP3,请按照邮件阅读器的做法:下载所有内容并在客户端过滤。如果您真的想过滤消息服务器端,请忘记 POP3 协议并使用针对它的 IMAP4。imaplib它通过模块在 Python 中有很好的支持

于 2016-07-12T07:17:53.787 回答