簡體   English   中英

我無法在python中使用imap獲取郵件

[英]I cannot fetch a mail using imap in python

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的值(假設resultOK ),則它是字符串的集合,而不是message 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模塊以這種方式返回數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM