私は最後のpython imaplib2で確認するので、IMAPメールボックスに追加された新しいメッセージを探しますか?

StackOverflow https://stackoverflow.com/questions/2047067

質問

私は、「アーカイブ」フォルダにすべての新しい着信メッセージをIMAPメールボックスを監視し、自動的にコピーするプログラムを作成しようとしています。私はIDLEコマンドを実装imaplib2を使用しています。ここに私の基本的なプログラムがあります:

M = imaplib2.IMAP4("mail.me.com")
M.login(username,password)
lst = M.list()
assert lst[0]=='OK'
for mbx in lst[1]:
    print "Mailboxes:",mbx

def process(m):
    print "m=",m
    res = M.recent()
    print res


M.select('INBOX')
M.examine(mailbox='INBOX',callback=process)
while True:
    print "Calling idle..."
    M.idle()
    print "back from idle"
M.close()
M.logout()

これは、適切にメールボックスを印刷し、最初の変更がメールボックスに発生したときの処理()を実行します。しかし、最近からの応答が()私には意味がない、と最初のメッセージの後、私は他の通知を取得することはありません。

誰もこれを行う方法を知っていますか?

役に立ちましたか?

解決

のpython-IMAPの例とリファレンスを参照してください。 -idle-と-imaplib2 に。 モジュールはスレッドを必要とする、あなたは、イベントの同期に注意を払う必要があります。

の例では、イベントに同期示唆し、そして読者にメール処理を出る

# The method that gets called when a new email arrives. 
# Replace it with something better.
def dosync(self):
    print "Got an event!"

質問からヒントを取ると、の "何かより良い" のことができます:

# Replaced with something better.
def dosync(self):
    print "Got an event!"
    res = self.M.recent()
    print res

他のヒント

私は)(最近は少し曖昧であることを発見しています(これはIMAPのあいまいさ、ではないimaplib2です)。アイドルの前と後にメッセージ番号のリストを維持するために、より良いようだ、との違いは、新しいメッセージです。

そして、メッセージのUIDを取得するには(メッセージ、 "UID")をフェッチを使用ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top