java - Retrofit 2 通过MS graph api发送邮件返回参数'Message'的值为空
问题描述
我有一个 Java Spring 项目,它使用 Retrofit 2 从 Microsoft 对 Graph API 进行 API 调用。我能够验证、阅读邮箱和检索/阅读电子邮件。但是我正在努力发送邮件。
我有以下用于发送电子邮件的代码:
权限:包含 Mail.send
private String[] scopes = [
"openid",
"email",
"profile",
"User.Read",
"Mail.Read",
"Mail.Send",
"Mail.ReadWrite",
"Calendars.Read",
"Calendars.ReadWrite",
"Contacts.Read",
"Contacts.ReadWrite",
"offline_access"
];
改造电话:
@Headers("Content-Type: application/json")
@POST("/v1.0/me/sendMail")
Call<Message> sendMessage(
@Body String messageObject
);
发送的字符串是 JSONString:
"{\"Message\":{\"toRecipients\":[{\"address\":\"test@test.be\",\"name\":\"test@test.be\"}],\"Body\":{\"ContentType\":\"text/html\",\"Content\":\"value(Email_body)=%3Cp%3Etesttext%3C%2Fp%3E\"},\"Subject\":\"testsubject\"},\"SaveToSentItems\":\"true\"}"
HTTP 响应:
<-- 400 Bad Request https://graph.microsoft.com/v1.0/me/sendMail (101ms)
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/json
request-id: 94d19c39-4b84-4ee9-98d2-d42d36886e40
client-request-id: 0c9d2c63-28bf-49c4-9ad6-08d81c6fd4b0
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"West Europe","Slice":"SliceC","Ring":"5","ScaleUnit":"003","RoleInstance":"AGSFE_IN_27"}}
Strict-Transport-Security: max-age=31536000
Date: Wed, 09 Oct 2019 07:41:54 GMT
{
"error": {
"code": "ErrorInvalidParameter",
"message": "The value of the parameter 'Message' is empty.",
"innerError": {
"request-id": "94d19c39-4b84-4ee9-98d2-d42d36886e40",
"date": "2019-10-09T07:41:54"
}
}
}
<-- END HTTP (253-byte body)
知道是什么导致了错误吗?
解决方案
我相信在实际发送json 数据时,您不应该使用双引号的转义字符。
因此,发出的字符串应该是未转义的,看起来像这样。
{"Message":{"toRecipients":[{"address":"test@test.be","name":"test@test.be"}],"Body":{"ContentType":"text/html","Content":"value(Email_body)=%3Cp%3Etesttext%3C%2Fp%3E"},"Subject":"testsubject"},"SaveToSentItems":"true"}
此外,你会发现
address
不是有效的财产toRecipients
,您应该在emailAddress
财产内name
属性无效,应删除。ContentType
值可以是text
或html
因此,发出的 json 应该是这个样子。
{
"Message": {
"toRecipients": [
{
"emailAddress": {
address:"test@test.be"
}
}
],
"Body": {
"ContentType": "html",
"Content": "value(Email_body)=%3Cp%3Etesttext%3C%2Fp%3E"
},
"Subject": "testsubject"
},
"SaveToSentItems": "true"
}
您还可以在以下链接中阅读有关 sendMail api 的更多信息
https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=http
推荐阅读
- .net - 从 .Net Framework 4.6 升级到 .Net Framework 4.8 后无法访问 Web 应用程序
- python - 有没有办法解决由 Windows 文件名中的无效字符产生的这些转义序列?
- javascript - 迭代嵌套数组以同时从所有对象中获取相同的索引值
- javascript - 如何为画布转换延迟加载
- ruby-on-rails - 如何在Ruby on Rails中出现错误时回滚事务块中的所有事务
- amazon-sagemaker - sagemaker 中的模型输出文件夹
- r - 连接到 Linode 服务器(Ubuntu 16.04)上的 RStudio - 什么用户名和密码?
- https - Istio 网关无法通过 HTTPS 连接
- generics - 计算散列(digest::Digest trait)并取回字符串的通用函数
- python - 是否可以附加到函数内部的外部列表形式?