私は最後のpython imaplib2で確認するので、IMAPメールボックスに追加された新しいメッセージを探しますか?
-
20-09-2019 - |
質問
私は、「アーカイブ」フォルダにすべての新しい着信メッセージを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")をフェッチを使用ます。
所属していません StackOverflow