2017-04-04 167 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' 
     }