2011-05-25 34 views
5

我爲我的項目使用imaplib,因爲我需要訪問gmail帳戶。事實:使用gmail的標籤,每封郵件可以放在任意數量的文件夾/盒子/標籤上。Python/imaplib - 如何獲取消息的標籤?

問題是我想從每條消息中獲取每個標籤。

我想到的第一個解決方案是使用「All Mail」文件夾獲取所有消息,然後針對每條消息檢查消息是否位於每個可用文件夾中。

但是,我覺得這個解決方案很重,我想知道是否有更好的方法來做到這一點。

謝謝!

在IMAP
+0

示例代碼在https://gist.github.com/找到更多關於Gmail的IMAP擴展1323795 – 2011-10-28 23:14:34

回答

9

對一些自定義標題讓所有給定消息標籤在Gmail中,你可以做以下

t, d = imapconn.uid('FETCH', uid, '(X-GM-LABELS)') 
or 
t, d = imapconn.fetch(uid, '(X-GM-LABELS)') 

BTW:您可以http://code.google.com/apis/gmail/imap/

+0

非常感謝! 這就是我正在尋找= D – jpaires 2011-08-02 08:46:07

+0

這是一個方便的答案 - 你應該接受它! – tcarobruce 2011-08-05 20:48:19

+0

嘿,我有一個類似的問題,(可能是http://stackoverflow.com/questions/24361257/how-can-i-save-draft-with-details-in-gmail-via-imaplib-in-python),可以你一步一步看看?謝謝! – Judking 2014-06-23 09:03:03

1

你沒有標籤,Gmail的「模擬」他們IMAP,你可以在低消息的原始來源從IMAP選擇了一個檢查,如果它與標籤

+0

我明白你在說什麼,而杉木首先,感謝您的幫助。 但是,我不認爲這是事實。 Gmail似乎沒有用標籤的任何自定義標頭標記郵件。什麼是有道理的,否則每次用戶添加/更改/從電子郵件中刪除標籤時,他們都必須更改消息。他們似乎只有一個盒子,而且一條消息(可能是對該消息的引用)可以同時在多個盒子中。 – jpaires 2011-05-26 10:38:58

+0

所以我認爲你可以得到(RFC822.HEADER)每個消息,你可以使用uid('FETCH','1:*','(RFC822.HEADER)')(不知道是否有特定的imaplib命令),因爲messageid是不夠的,然後散列結果,即使用md5或沙,使文件夾的python字典。對於每個文件夾中的每條消息,您都可以檢查每個文件夾中是否存在。 這不是最理想的選擇,但是使用gmail你可以在多個文件夾中看到相同的消息,因爲它們會拉動多個標籤,所以gmail不提供自定義標題。無論如何,整個過程不是很慢,因爲你只選擇標題 – sherpya 2011-05-27 15:15:04

+0

你可以使用也只能使用message-id + sender + dest + date – sherpya 2011-05-27 15:15:15