2017-08-05 11 views
0

を取得し、現在、私は次のコードによって与えられたメールボックス内の最初の50件のメッセージのUIDをフェッチしようとしています:PythonのIMAPClient - 私は私のDjangoの電子メールクライアントで<a href="https://www.imapwiki.org/ClientImplementation/MessageList#preview" rel="nofollow noreferrer">IMAPClient</a>を使用していますUID

server = IMAPClient(HOST, use_uid=True, ssl=True) 
server.login(USERNAME, PASSWORD) 
server.select_folder(folder_name) 
messages = server.search(['NOT DELETED', '1:50']) 
response = server.fetch(messages, ['UID']) 

私が期待しますその後、以下のコマンドでユニークなメッセージ識別子を取得します

for data in response.items(): 
    data[b'UID'] 

が、私はKeyError例外で終わる - データが「UID」という名前のキーを持っていません。 私は何が間違っていますか? IMAPClient経由でメッセージUIDを取得する正しい方法は何ですか?

答えて

1

IMAPClientはデフォルトでUIDを使用します。これは、デフォルトでは、search()によって返されるメッセージIDが UIDであることを意味します。 UIDを個別に照会する必要はありません。

IMAPClientコンストラクタへの引数とuse_uid属性を使用して、動作を切り替えることができます。 use_uidTrueの場合、メッセージIDを受け入れるか返すすべてのメソッドがUIDで機能します。 fetch()には、メッセージシーケンスがSEQアイテムとして含まれています。

use_uidFalseの場合、fetch()はメッセージシーケンスを受け入れますが、UIDsを照会できます。

例:ここ

server = IMAPClient(HOST, use_uid=True, ssl=True) 
server.login(USERNAME, PASSWORD) 
server.select_folder(folder_name) 

messages = server.search(...) 
# messages contains UIDs 

r = server.fetch(messages, [...]) 
for uid, data in r.items(): 
    print(uid, data[b'SEQ']) # show UID & message sequence 

server.use_uid = False 

messages = server.search(...) 
# messages contains sequence numbers (not UIDs) 

r = server.fetch(messages, ['UID']) 
for seq, data in r.items(): 
    print(seq, data[b'UID']) # show message sequence & UID 

より:http://imapclient.readthedocs.io/en/stable/#message-identifiers

関連する問題