我一直在学习如何使用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"
我得到了预期的行为。
我想这是"已解决"然后
答案 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,请查看:
答案 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"
我得到了预期的行为。
我想这是"已解决"然后