【问题标题】:Getting UnRead Messages using poplib, Python使用 poplib、Python 获取未读消息
【发布时间】:2013-12-23 05:36:26
【问题描述】:

我正在尝试编写一些脚本来检查使用 pop3 的邮件服务。如您所见,我使用 poplib 模块。但是,我看不到获取未读消息的正确方法。 我找到了一种检索所有邮件的方法,因此在此调用中花费了很多时间:

messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]

有没有办法过滤未读消息? 你知道其他处理流行邮件服务的好模块吗? 这是我正在使用的代码:

import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop3.live.com', 995) #Connect to hotmail pop3 server
pop_conn.user('address')
pop_conn.pass_('password')
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print "{} : {}\n".format(message['subject'], message['From'])
pop_conn.quit()

【问题讨论】:

  • POP3 协议不支持已读或未读消息的概念。为此,您必须使用 IMAP。
  • @Gryphius 你确定吗?因为从 python (docs.python.org/2.6/library/poplib.html#poplib.POP3.retr) 上的 poplib 文档中可以看出,在特定电子邮件上使用“retr”功能会将此特定电子邮件设置为“已看到标志”。
  • 我认为这里的文档有点误导。 poplib.retr 源仅将 RETR 发送到服务器,仅此而已。这将导致服务器将消息标记为已看到-但这仅在 IMAP 会话中可见,我很确定您无法通过 POP3 读取已看到的标志。

标签: python email poplib


【解决方案1】:

有一个解决方法。

您可以使用message_count, mailbox_size = pop_conn.stat() 检索message_count 并以某种方式存储。稍后,您可以再次调用pop_conn.stat() 并将message_count 与存储的值进行比较(如果更改,请记住更新存储的值)。区别在于“未读”邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多