我尝试在我的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'错误':{u' message':u'尝试阅读邮件时发现了丢失或空的内容类型标头。内容类型标题是必需的。',u'代码':u' RequestBodyRead'}}
在他们的文档中找不到任何相关内容。希望有人能赐教我:)
答案 0 :(得分: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'
}