Python imaplib搜索'NOT'关键字

时间:2014-05-01 05:22:38

标签: python imap imaplib

我一直在学习如何使用python imaplib库来处理我正在进行的项目,但我看到了一些令我难过的行为。当我尝试使用' NOT FROM'它返回与' FROM'相同,好像即使在那里也没有。我的假设是,我只是把命令错了,但我已经搜索了几个例子,我找到的每一个似乎都像我一样。

import imaplib
mail = imaplib.IMAP4_SSL(host)
mail.login(email, pw)
mail.select(mailbox)
# The following two work as expeceted
# and give different results
mail.uid('search', None, '(NOT NEW)')
mail.uid('search', None, '(NEW)')
# However the following two give the same
mail.uid('search', None, '(FROM gmail)')
mail.uid('search', None, '(NOT FROM gmail)')

我已经尝试过各种方式输入它我能想到的,但它们似乎都不起作用。我已经检查了RFC2060,一个imaplib说它是基于和一些更近期的。

$ python --version
Python 2.7.5+

有谁看到我搞砸了或者也看到了这个问题?似乎这个特定的图书馆似乎很少


编辑: 我已经进一步了解了这一点,它似乎是我连接到的imap服务器的一个问题..尝试通过openssl连接后

$ openssl s_client -connect imap.mail.yahoo.com:993 -crlf

并登录并尝试

UID SEARCH FROM "gmail"
UID SEARCH NOT FROM "gmail"

我得到了同样的行为。

但是当我连接到Gmail帐户时

$ openssl s_client -connect imap.gmail.com:993 -crlf

并尝试

UID SEARCH FROM "gmail"
UID SEARCH NOT FROM "gmail"

我得到了预期的行为。

我想这是"已解决"然后

2 个答案:

答案 0 :(得分:0)

NOT FROM gmail在Gmail imap中运行良好,但关于雅虎,它无法正常工作。

试一试:

import imaplib
## connect to imap server
mail = imaplib.IMAP4_SSL('imap.mail.yahoo.com')
mail.login('username','password')
mail.select('inbox')

## search all mails
all_mail = mail.search(None,'ALL')

## search all gmails
all_gmail = mail.search(None,'(FROM "gmail")')

## make them as list of int
all_mail = [x for x in all_mail[1][0].split() if x != ""]
all_gmail = [x for x in all_gmail[1][0].split() if x != ""]
not_gmail = [x for x in all_mail if x not in all_gmail]
#not_gmail = set(all_mail) - set(all_gmail)    

## get the output
print "all mail: " + str(all_mail)
print "all gmail: " + str(all_gmail)
print "all not gmail: " + str(not_gmail)

它有点慢,但工作正常。 对于RFC,请查看:

http://tools.ietf.org/html/rfc3501.html

http://tools.ietf.org/html/draft-ietf-imapext-regex-00

答案 1 :(得分:0)

我已经进一步了解了这一点,这似乎是我连接到的imap服务器的一个问题..尝试通过openssl与

连接后
$ openssl s_client -connect imap.mail.yahoo.com:993 -crlf

并登录并尝试

UID SEARCH FROM "gmail"
UID SEARCH NOT FROM "gmail"

我得到了同样的行为。

但是当我连接到Gmail帐户时

$ openssl s_client -connect imap.gmail.com:993 -crlf

并尝试

UID SEARCH FROM "gmail"
UID SEARCH NOT FROM "gmail"

我得到了预期的行为。

我想这是"已解决"然后