簡體   English   中英

如何通過腳本下載郵件附件?

[英]How to download mail attachment through script?

我正在編寫一個 python 腳本來通過 Graph API 獲取郵件附件。

在 Graph Explorer 中,我可以通過調用后手動按下下載按鈕來完美下載文件附件:

https://graph.microsoft.com/v1.0/me/messages/{message-id}/attachments/{attachment-id}/$value

但是,當嘗試在我的 Python 腳本中發出相同的請求時,我得到的只是“響應 [200]”(因此請求有效,但文件無法訪問)。

在此處輸入圖像描述

我嘗試提出這樣的請求:

def get_mails_json():
  requestHeaders = {'Authorization': 'Bearer ' +result["access_token"],'Content-Type': 'application/json'}
  queryResults = msgraph_request(graphURI + "/v1.0/me/messages?$filter=isRead ne true",requestHeaders)

  return json.dumps(queryResults)

try:
    data = json.loads(mails)
    values = data['value']
    for i in values:
        mail_id = i['id']
        mail_subj = i['subject']            
        if i['hasAttachments'] != False:               
            attachments = o365.get_attachments(mail_id)
            attachments = json.loads(attachments)
            attachments = attachments['value']
            for i in attachments:                   
                details = o365.get_attachment_details(mail_id,i["id"])
except Exception as e:  
    print(e)


def get_attachment_details(mail,attachment):
requestHeaders = {'Authorization': 'Bearer ' + result["access_token"],'Content-Type': 'application/json'}
queryResults = msgraph_request(graphURI + "/v1.0/me/messages/"+mail+"/attachments/"+attachment+'/$value',requestHeaders)

return json.dumps(queryResults)

有沒有辦法讓我通過我的 python 腳本將文件下載到全部?

我找到了一個通過 python 腳本下載文件的簡單解決方案!

我使用了芯片的答案,在這個線程上找到: 線程包含芯片的答案

我這樣請求附件:

def get_attachment_details(mail,attachment):
requestHeaders = {'Authorization': 'Bearer ' + result["access_token"],'Content-Type': 'application/file'}
resource= graphURI + "/v1.0/me/messages/"+mail+"/attachments/"+attachment+'/$value'
payload = {}
results = requests.request("GET", resource,headers=requestHeaders,data=payload, allow_redirects=False)

return results.content

這讓我得到了文件的編碼字節,然后我將其解碼並寫入文件,如下所示:

for i in attachments:      
      details = o365.get_attachment_details(mail_id,i["id"])
      toread = io.BytesIO()
      toread.write(details)
      with open(i['name'], 'wb') as f:
         f.write(toread.getbuffer())

暫無
暫無

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

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