我确定我做的是一些简单的错误,但我不能为我的生活找出如何将“IsRead”属性设置为true。这是我的流程的最后一步,它获取了一个过滤的消息列表,并存储和处理任何附件。
根据文档“IsRead”是可写的:http://msdn.microsoft.com/office%5Coffice365%5CAPi/complex-types-for-mail-contacts-calendar#ResourcesMessage
我正在使用python 2.7和请求模块:
# once file acquired mark the email as read
params = {'IsRead':'True'}
base_email_url = u'https://outlook.office365.com/api/v1.0/me/messages/{0}'.format( msgId )
response = requests.patch(base_email_url, params, auth=(email,pwd))
log.debug( response )
回复的反应如下:
{"error":{"code":"ErrorInvalidRequest","message":"Cannot read the request body."}}
我的请求有什么问题?
答案 0 :(得分:2)
PATCH https://outlook.office365.com/api/v1.0/Me/Messages('msgid') HTTP/1.1
Accept: application/json;odata.metadata=full
Authorization: Bearer <token>
Content-Type: application/json;odata.metadata=full
Host: outlook.office365.com
Content-Length: 24
Expect: 100-continue
Connection: Keep-Alive
{
"IsRead": "true"
}
答案 1 :(得分:1)
我有自己的答案,这确实是一件简单的事情。 没有完全阅读PATCH与GET或POST的不同之处是错误的。 简而言之,确保为正确的内容类型设置标头非常重要。
以下是工作代码:
# once file acquired mark the email as read
changes = {u'IsRead':u'True'}
headers = {'Content-Type': 'application/json'}
json_changes = json.dumps(changes)
base_email_url = u'https://outlook.office365.com/api/v1.0/me/messages/{0}'.format( msgId )
response = requests.patch(base_email_url, data=json_changes, auth=__AUTH, headers=headers)
log.debug( response )