2011-03-01 56 views
4
import imaplib 

user = raw_input("Enter your GMail username:") 
pwd = getpass.getpass("Enter your password: ") 


m = imaplib.IMAP4_SSL("imap.gmail.com") 
m.login(user,pwd) 
m.select("[Gmail]/Inbox") # here you a can choose a mail box like INBOX instead 
m.search("NEW") 

我想通过Python中的imap仅选择Gmail中的新邮件。问题是,我总是得到以下错误:使用imaplib在Gmail中进行搜索

imaplib.error: command SEARCH illegal in state AUTH

我GOOGLE了它和阅读,我不得不使用IMAP4,但我已经在使用它,我真的不能找出如何解决它。

+1

该文件夹被称为'INBOX',而不是'[Gmail]/Inbox'。我相信Gmail不支持'\ Recent'标志,因此搜索'NEW'永远不会匹配任何消息。 – dkarp 2011-03-01 22:55:23

回答

4

问题似乎是没有邮箱叫[Gmail]/Inbox。通过调用m.list()可以获得所有有效邮箱的清单。

我通过使用Python的交互式shell(使用Python 2.6)发现了这一点,它显示IMAP服务器对每个IMAP操作的响应。

注意:使用Python交互式shell时,导入pprint并调用pprint.pprint(m.<method of m>(<params>))对于某些发送大量信息的IMAP命令来说可能是个好主意。

+0

你是对的,将它改为“收件箱”解决了这个问题。奇怪的是,因为错误信息指向SEARCH。 – HankSmackHood 2011-03-01 22:59:02

+1

@JacobK:也许imaplib只会在'BAD'上抛出异常,而不是在'NO'上?当您尝试在没有成功选择文件夹的情况下尝试“搜索”时,尝试“选择”不存在的文件夹时会出现“否”,而出现“不良”。 – dkarp 2011-03-01 23:31:31

1
import imaplib  
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)  
obj.login('username', 'password')  
obj.select('**label name**') <-- the label in which u want to search message  
obj.search(None, 'FROM', '"LDJ"') 
0

对于我来说,它是一种具有 “[Gmail中]”,这是有问题的:

即更改此设置:

m.select("[Gmail]/Inbox") 

这样:

m.select("Inbox") 

无论如何,使用m.list()上面建议的人是一个良好的开端。