Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用poplib、Python获取未读消息_Python_Email_Poplib - Fatal编程技术网

使用poplib、Python获取未读消息

使用poplib、Python获取未读消息,python,email,poplib,Python,Email,Poplib,我正在尝试编写一些脚本来检查使用pop3的邮件服务。正如您所看到的,我使用poplib模块。但是,我看不到获取未读消息的正确方法。 我发现了一种检索所有邮件的方法,因此在这个调用中花费了很多时间: messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)] 有没有办法过滤未读邮件? 你知道其他处理pop邮件服务的好模块吗? 以下是我正在使用的代码: import poplib from email i

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

messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
有没有办法过滤未读邮件? 你知道其他处理pop邮件服务的好模块吗? 以下是我正在使用的代码:

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()
有一个解决办法


您可以使用
message\u count,mailbox\u size=pop\u conn.stat()
检索
message\u count
并以某种方式存储。稍后,您可以再次调用
pop_conn.stat()
,并将
message_count
与存储的值进行比较(如果存储值发生变化,请记住更新它)。区别在于“未读”邮件。

POP3协议不支持已读或未读邮件的概念。你必须用IMAP来做这个。@Gryphius你确定吗?因为从python()上的poplib文档可以看出,在特定电子邮件上使用“retr”函数会设置特定电子邮件的“seen标志”。我认为这些文档在这里有点误导。retr源只向服务器发送retr,而不发送其他内容。这将导致服务器将消息标记为已看到-但这仅在IMAP会话中可见,我很确定您无法通过POP3读取已看到的标志。