2017-04-04 164 views
0

我想在我的Python代碼中使用Outlook的REST API來代表已經向我發送他同意的用戶發送電子郵件。Outlook API電子郵件附件問題

我能夠用自己/我/ sendmail的節點成功發送文本電子郵件具有以下有效載荷:

email_payload = { 
     "Message": { 
      "Subject": email_subject, 
      "Body": { 
       "ContentType": "Text", 
       "Content": email_body 
      }, 
      "ToRecipients": [ 
       { 
        "EmailAddress": { 
         "Address": to 
        } 
       } 
      ] 
     } 
    } 

但是,嘗試添加附件時(根據他們的文檔),我遇到的一些問題:

 email_payload["Message"]["Attachments"] = [ 
      { 
       "ContentType": "application/pdf", 
       "Name": "{0}".format("something.pdf"), 
       "ContentBytes": base64.b64encode(attachment.read()) 
      } 
     ] 

問題在於415具有以下內容的響應狀態代碼: {u'error「:{u'message」:u'A丟失或試圖讀取消息時空內容類型報頭被發現。內容類型標題是必需的。',u'code':u'RequestBodyRead'}}

在他們的文檔中找不到關於此的任何內容。希望有人能賜教:)

回答

0

對於任何人有這樣的問題,這裏的環境和修復:

起初,因爲我只發送純文本電子郵件,我請求標題是這樣的:

request_headers = { 
    'Authorization': "Bearer {0}".format(token), 
} 

和實際要求:

api_response = requests.post(
     request_url, 
     json.dumps(body), 
     headers=request_headers 
    ) 

正如你可能已經注意到我並沒有在我的頭髮送任何內容類型(不知道爲什麼),但一切都很順利,從而直到我決定添加附件。

好像如果我request_headers將包含內容類型太多,一切都會順利:

request_headers = { 
      'Authorization': 'Bearer {0}'.format(refreshed_token), 
      'Content-Type': 'application/json' 
     }