2011-03-01 89 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()上面建議的人是一個良好的開端。