3

IMAP からimaplibmbox (mailboxモジュール付き) にメッセージをダウンロードしています:

import imaplib, mailbox
svr = imaplib.IMAP4_SSL('imap.gmail.com')
svr.login('myname@gmail.com', 'mypaswword')
resp, [countstr] = svr.select("[Gmail]/All Mail", True)

mbox = mailbox.mbox('mails.mbox')

for n in range(...):
  resp, lst1 = svr.fetch(n, 'UID')    # the UID of the message
  resp, lst2 = svr.fetch(n, '(RFC822)')   # the message itself
  mbox.add(lst2[0][1])      # add the downloaded message to the mbox
  #
  # how to store the UID of this current mail inside mbox? 
  #

UID = のメールをダウンロードしましょう1 .. 1000。次回は1通目からではなく、1001通目から始めたいと思います。ただし、どこmailbox.mbox にも保存しませんUID。そのため、次に mbox ファイルを開くときに、どこで停止したかを知ることは不可能です。

モジュールにメールmailboxを保存する自然な方法はありますか?UID

それとも、私はmailbox+を本来imaplibあるべき方法で使用していないのでしょうか?

4

2 に答える 2

1

あなたの質問に答えるには: ドキュメントを長い間見つめた後、あなたが探していることをきれいに行う方法がわかりませんでした。UID を mbox ファイルに保存することが絶対的な要件である場合は、保存するメールにカスタム UID ヘッダーを追加することをお勧めします。

message = email.message_from_string(lst2[0][1])
message.add_header("my_internal_uid_header", lst1[0][1])
mbox.add(message)

もちろん、すべてのメッセージを反復処理する必要があるため、保存されている最大の UID を取得するのは非常に面倒です。これは本当にまずいと思います。可能であれば、そのような情報を別の場所に保存することをお勧めします。

頑張ってください!

于 2015-04-12T20:58:14.660 に答える