1

我正在尝试在我的 python 代码中使用 Outlook 的 REST API 来代表已经同意我的用户发送电子邮件。

我能够使用他们的 /me/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'尝试读取消息时发现缺少或空的内容类型标头。内容类型标头是必需的。', u'code': u'RequestBodyRead'}}

在他们的文档中找不到任何关于此的内容。希望有人能启发我:)

4

1 回答 1

0

对于其他有此类问题的人,这里是上下文和修复:

最初,由于我只发送纯文本电子邮件,我的请求标头如下所示:

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

而实际的要求:

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

正如您可能已经注意到的那样,我没有在我的标题中发送任何内容类型(不知道为什么),但到目前为止一切顺利,直到我决定也添加附件。

好像如果我的 request_headers 也包含 Content-Type ,一切都会顺利:

  request_headers = {
             'Authorization': 'Bearer {0}'.format(refreshed_token),
             'Content-Type': 'application/json'
         }
于 2017-04-04T18:53:45.697 回答