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

По какой-то причине у меня не работает функция "Отправить от имени". Graph всегда возвращает ErrorSendAsDenied (когда 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 Test), однако доставка почты ВСЕГДА не удалась.

Пример отправленного сообщения 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 прицелы.

Другие вопросы по тегам