Дооснащение 2 отправка почты через MS graph api возвращает значение параметра «Сообщение» пусто - PullRequest
2 голосов
/ 09 октября 2019

У меня есть проект Java Spring, который использует Retrofit 2 для выполнения API-вызовов в Graph API от Microsoft. Я могу аутентифицировать, читать почтовые ящики и получать / читать электронные письма. Однако я борюсь с отправкой почты.

У меня есть следующий код для отправки электронного письма:

Разрешения: Содержит 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)

Есть идеи, что вызывает ошибку?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Итак, я понял, что правильный способ размещения необработанного JSON с модификацией 2:

    @Headers("Content-Type: application/json")
    @POST("/v1.0/me/sendMail")
    Call<Message> sendMessage(
            @Body HashMap<String, Object> messageObject
    );
1 голос
/ 09 октября 2019

Я считаю, что вы не должны иметь экранирующих символов для двойных кавычек, когда данные 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 свойства
  • 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"
}

Вы также можете узнать больше об API sendMail по следующей ссылке

https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...