Не удается отправить сообщение электронной почты от имени другой учетной записи Outlook O365

#microsoft-graph-api #microsoft-graph-mail

#microsoft-graph-api #microsoft-graph-mail

Вопрос:

По какой-то причине у меня не работает функция «Отправить от имени». Graph всегда возвращает ошибку Sendasdenied (когда значения полей From и Sender отличаются).

Проверяется, что учетные записи имеют правильную конфигурацию для отправки друг от друга. Я не смог заставить его работать, потратив на это более трех дней.

При проверке подлинности запрашиваются следующие разрешения:

  • openid
  • email
  • profile
  • offline_access
  • User.Read
  • Mail.Read
  • Mail.ReadWrite
  • Mail.Read.Shared
  • Mail.ReadWrite.Shared
  • Mail.Send
  • Mail.Send.Shared

В приведенном ниже примере пользователь Gregory Test хочет отправлять сообщения от имени Sem Test. Для отправки электронного письма используется действительный токен доступа для авторизации (аутентифицированный с помощью теста Gregory), однако доставка электронной почты ВСЕГДА завершается сбоем.

Образец отправленного сообщения в формате JSON:

 {
   "Message":{
      "Subject":"Trying to send message on behalf",
      "Body":{
         "ContentType":"html",
         "Content":" email html content "
      },
      "From":{
         "EmailAddress":{
            "Address":"sem.test@contoso.com",
            "Name":"Sem Test"
         }
      },
      "Sender":{
         "EmailAddress":{
            "Address":"gregory.test@contoso.com",
            "Name":"Gregory Test"
         }
      },
      "ToRecipients":[
         {
            "EmailAddress":{
               "Address":"semtestestestes@gmail.com",
               "Name":"Sem Shehovtsov"
            }
         }
      ]
   }
}
  

Если для Sender и From установлено одинаковое значение, все работает нормально. Sender Почтовый ящик настроен так, чтобы разрешать отправку сообщений от имени других пользователей.

введите описание изображения здесь

Есть идеи?

Ответ №1:

Вам не нужно устанавливать Sender свойство, Graph обработает это автоматически за вас. Из документации:

Чтобы отправить от другого пользователя, установите from свойство для сообщения, отправляемого на адрес электронной почты пользователя, с которого нужно отправить. Вам не нужно устанавливать sender свойство — Microsoft Graph установит его соответствующим образом на основе разрешений почтового ящика, предоставленных пользователю, который вошел в систему.

Попробуйте вместо этого эту полезную нагрузку:

 {
   "message":{
      "subject": "Trying to send message on behalf",
      "body":{
         "contentType":"html",
         "content":" email html content "
      },
      "toRecipients":[
         {
            "emailAddress":{
               "address":"semtestestestes@gmail.com",
               "name":"Sem Shehovtsov"
            }
         }
      ],
      "from":{
         "emailAddress":{
            "address":"sem.test@contoso.com",
            "name":"Sem Test"
         }
      },
   }
}
  

Кроме того, вам не нужно запрашивать оба Read и ReadWrite области. ReadWrite Области перекрываются с Read областями.

Комментарии:

1. удаление раздела «отправитель» ничего не меняет.