2

さて、私のコードの奇妙な振る舞いに気づき、問題の根底にたどり着こうとしました。imapライブラリを使用してメールをチェックしようとすると、新着メールがあるかどうかを確認するために毎回ログインする必要がありますか?例えば

#get_mail function.
 def get_mail():
       conn = imaplib.IMAP4_SSL('imap.gmail.com')
       conn.login(gmail_user_id,gmail_user_pass)
       conn.select('inbox')
       conn.search(None,'(Inbox)')
       return something here

代わりに、次のようなことを行うことができます。

#create 'conn' as a global var
conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login(gmail_user_id,gmail_user_pass)
conn.select('inbox')
#get_mail function
def get_mail():
       conn.search(None,'(Inbox)')
       return something here

問題は、上記の2番目のスニペットで、connが作成された後に新しいメールが送信された場合、それがフェッチされていないことです。では、関数を実行するたびに再ログインする必要がありますか?

4

1 に答える 1

0

新着メールがあるかどうかを確認するために毎回ログインする必要がありますか?

はい。

問題は、上記の2番目のスニペットで、connが作成された後に新しいメールが送信された場合、それがフェッチされていないことです。では、関数を実行するたびに再ログインする必要がありますか?

通常、再度ログインする必要はありませんIDLE。IMAPサーバーがサポートしている場合に使用します。IDLEサポートとは、接続を開いたままにして(したがって「アイドル状態」)、新しいメッセージをポーリングするだけでよいことを意味します。ループ内で新しいメッセージをリッスンする方法について説明しているこのリンクを参照してください。

于 2012-07-09T07:38:15.777 に答える