2012-11-15 51 views
7

我試圖獲取主題以「New Order」開頭的所有電子郵件,但我似乎無法弄清楚。目前我可以搜索一個完全匹配的設置,像這樣...Python IMAP搜索部​​分主題

result, data = M.uid('search', None, '(HEADER Subject "Subject Here")') 

但是,這不會檢索任何不完全匹配的消息。我將如何去做一個部分匹配?

重要如果我正在與gmail的imap服務器通話。

感謝

+0

什麼API您使用/庫,也有什麼'M'? – John

+0

您也可能會發現http://stackoverflow.com/a/642988/322909有用。 – John

+1

我正在使用imaplib庫,M是IMAP4對象。我本來希望只是拉下那些有我想要的主題的信息,而不是我所信任的每一條信息都是他們在鏈接中所做的,儘管我可能是錯的。 – Kazurik

回答

14

按照IMAP RFCSEARCH應該做的所有的子串匹配的匹配:

In all search keys that use strings, a message matches the key if the string is a substring of the field. The matching is case-insensitive.

因此,搜索

M.uid('search', None, 'HEADER Subject "New Order"') 

其中New Order任何地方發生應匹配的所有消息在主題。如果不是,則應通知Google其服務器未正確實施IMAP。在此期間,你可以嘗試使用SUBJECT關鍵在

M.uid('search', None, 'SUBJECT "New Order"') 

另外,根據Google's IMAP extension documentation你也許可以使用X-GM-RAW鍵和Gmail的搜索字符串作爲

M.uid('search', None, r'X-GM-RAW "subject:\"New Order\""') 
+1

我想通了哪裏出了問題。 Google/gmail假設所有搜索都是單詞,這意味着'(HEADER Subject「Subject Here)將匹配諸如」Subject Here Extra words for example「之類的內容,但不包含」Subject Here5「。我仍然不確定如何使用gmail進行非單詞搜索,或者甚至有可能。 – Kazurik

+0

您將不得不使用gmails擴展搜索語法。他們只支持正常搜索的面向單詞的搜索。 (他提供的x-gm-raw bit) – Max

+1

當我運行「M.uid('search',None,r'X-GM-RAW」主題:\「New Order \」「')」我得到以下錯誤:「imaplib.error:UID命令錯誤:BAD ['無法解析命令']」。任何想法爲什麼這可能是? – Kazurik

4

這個工作對我:

mail.uid('search', None, r'(X-GM-RAW "subject:\"New Order\"")') 
-2

這爲我工作:

M.uid('search',None, '(SUBJECT "New Order")') 

格式搜索(EmailAttribute "your searchstring")

希望它爲你工作。

0

這爲我工作:

result, data = m.search(None, 'X-GM-RAW', 'subject: New Order')