このfetch
メソッドはこのエラーを出します:
imaplib.IMAP4.error:FETCHコマンドエラー:BAD [b 'コマンドを解析できませんでした']
すべてのコードを添付しているわけではありません。imapを使用して見えないメッセージを取得し、本文を取得してテキストとして保存してから、添付ファイルをダウンロードしたいと思います。
import imaplib, email, os
user= "test9101997"
password="Monday@123"
imap_url="imap.gmail.com"
attach_dir='E:\PROJECT\attachment'
filePath='D:\ATTACH'
con=imaplib.IMAP4_SSL(imap_url)
con.login(user,password)
con.select('INBOX')
#UIDs=con.search(None,'UNSEEN')
#print(UIDs)
(result, messages) = con.search(None, 'UnSeen')
if result == "OK":
for message in messages:
try:
ret, data =con.fetch(message,'(RFC822)')
except:
print ("No new emails to read.")
#self.close_connection()
#exit()
#result, data=con.fetch(i,'(RFC822)')
raw=email.message_from_bytes(data[0][1])
の戻り値について混乱するかもしれませんcon.search()
。messages
その呼び出しの後の値を見ると(それresult
がであると仮定してOK
)、それは文字列のコレクションであり、メッセージIDのリストではありません。つまり、次のような呼び出しの後:
result, messages = con.search(None, 'UnSeen')
の値はmessages
次のようになります。
['1 2 15 20']
したがって、次のように繰り返し処理しようとすると、次のようになります。
for message in messages:
最初のループ反復でのメッセージの値は1 2 15 20
になります。そのため、コマンドエラーが発生します。実行している要求は意味がありません。代わりに、次のようなことをしたいと思うでしょう。
(result, blocks) = con.search(None, 'UnSeen')
if result == "OK":
for messages in blocks:
for message in messages.split():
ret, data = con.fetch(message, '(RFC822)')
raw = email.message_from_bytes(data[0][1])
imaplib
モジュールがこの方法でデータを返す理由は実際にはありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加