Отправка сообщений Outlook от другого пользователя

Exchange Online предусматривает разрешения для почтового ящика, позволяющие пользователю отправлять электронную почту таким образом, чтобы в качестве отправителя значился другой пользователь, список рассылки, группа, ресурс или общий почтовый ящик. Microsoft Graph также поддерживает эту функцию, но конечный результат может отличаться в зависимости от точных разрешений, предоставленных в Exchange Online, а также того, какие API были использованы для отправки электронной почты.

Разрешения

К сообщениям, отправляемым от другого пользователя, применяются два типа разрешений:

Разрешения Microsoft Graph

Чтобы отправлять сообщения от другого пользователя, приложения, использующие маркеры пользователя, используют разрешение Mail.Send.Shared.

Примечание.

Приложения, использующие маркеры приложения вместо маркеров пользователя и имеющие разрешение Mail.Send, предоставленное администратором, могут отправлять почту как любой пользователь в организации, отправляя сообщение в обычном порядке с почтового ящика пользователя.

Разрешения для почтового ящика

На конечный результат отправки сообщения от другого пользователя влияют два разрешения: Отправить от имени и Отправить как. Пользователь, который выполнил вход в приложение, используя разрешение Mail.Send.Shared, ДОЛЖЕН иметь по крайней мере одно из таких разрешений, предоставленных для почтового ящика, группы или списка рассылки, которые значатся в качестве отправителя.

Примечание.

Сейчас невозможно использовать Microsoft Graph для запроса разрешений на доступ к почтовым ящикам у пользователя, прошедшего проверку подлинности.

Отправить от имени

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

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

Он предоставляется в Microsoft Graph в качестве sender свойств (пользователь, который фактически отправил сообщение) и from (пользователь, группа или т. д., из чего сообщение, как представляется, является) .

{
  "id": "AAMkAGE1...",
  "subject": "Send mail test",
  "sender": {
    "emailAddress": {
      "name": "Adele Vance",
      "address": "AdeleV@contoso.com"
    }
  },
  "from": {
    "emailAddress": {
      "name": "Pradeep Gupta",
      "address": "PradeepG@contoso.com"
    }
  }
}

Пользователь может предоставлять это разрешение для своего почтового ящика другому пользователю, используя Outlook. Администраторы могут предоставить это разрешение для любого почтового ящика, группы или списка рассылки в Центре администрирования Microsoft 365.

Отправить как

С таким разрешением нет указаний относительного того, что сообщение было отправлено от другого пользователя. Свойства sender и from имеют одинаковое значение.

Пользователи не могут предоставить это разрешение своим почтовым ящикам. Администраторы могут предоставлять это разрешение в Центре администрирования Microsoft 365.

Отправка с помощью Microsoft Graph

Вы можете отправлять сообщения от другого пользователя, отправляя их напрямую либо создавая черновик, а затем отправляя его.

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

Например, для отправки электронной почты от группы sales@contoso.com задайте настройки сообщения как указано ниже.

{
  "subject": "January sales report",
  "toRecipients": [
    {
      "emailAddress": {
        "address": "MeganB@contoso.com"
      }
    }
  ],
  "from": {
    "emailAddress": {
      "address": "sales@contoso.com"
    }
  }
}

Порядок сохранения в папке "Отправленные"

После отправки сообщения его можно сохранить в папке "Отправленные" фактического отправителя, в папке "Отправленные" пользователя, который значится как отправитель, или в обеих папках. Его также можно не сохранять.

Примечание.

Если сообщение будет отправлено с адреса, который не имеет почтового ящика (например, список рассылки), папки "Отправленные" у пользователя, значащегося в качестве отправителя, нет.

  • Если ваше приложение выполняет отправку с использованием конечной точки /me (или /users/{user-id}, где user-id соответствует пользователю, который выполнил вход), по умолчанию сообщение будет сохранено в папке "Отправленные" пользователя, являющегося отправителем.
  • Если ваше приложение выполняет отправку с использованием /users/{user-id}, где user-id соответствует пользователю, значащемуся в качестве отправителя, по умолчанию сообщение будет сохранено в папке "Отправленные" пользователя, значащегося как отправитель.

    Важно!

    Чтобы отправить таким образом, фактический отправитель должен иметь разрешение для почтового ящика Полный доступ, помимо разрешения Отправить от имени или Отправить как.

Порядок по умолчанию может меняться в зависимости других сторонних факторов.

  • Администраторы могут обновить почтовый ящик пользователя, значащегося в качестве отправителя, таким образом, чтобы всегда сохранять копии сообщений, отправленных делегированным пользователем, в его папке "Отправленные".
  • Задав свойство saveToSentItems как false в запросе отправить почту, вы можете отменить сохранение элемента в папке "Отправленные". Тем не менее, если администратор настроил параметр "всегда сохранять копию", сообщения будут по-прежнему сохраняться в папке "Отправленные" пользователя, значащегося как отправитель.

Примеры

Пример 1. Успешная отправка через конечную точку /me endpoint

В этом примере Александру Воронову предоставлено разрешение Отправить от имени на почтовый ящик Алексея Виноградова.

Запрос

POST /me/sendmail
Content-Type: application/json

{
  "message": {
    "subject": "Expense reports",
    "body": {
      "contentType": "text",
      "content": "Have you submitted your expense reports yet?"
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "MeganB@contoso.com"
        }
      }
    ],
    "from": {
      "emailAddress": {
        "address": "AllanD@contoso.com"
      }
    }
  }
}

Ответ

HTTP/1.1 202 Accepted

Пример 2. Неудачная попытка отправки без разрешений

В этом примере Александр Воронов пытается отправить сообщение электронной почты от Полины Кольцовой, однако ему не предоставлено разрешение Отправить от имени или Отправить как. Ответ содержит ошибку ErrorSendAsDenied.

Запрос

POST /me/sendmail
Content-Type: application/json

{
  "message": {
    "subject": "Support ticket",
    "body": {
      "contentType": "text",
      "content": "I noticed you opened a support ticket yesterday..."
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "MeganB@contoso.com"
        }
      }
    ],
    "from": {
      "emailAddress": {
        "address": "PattiF@contoso.com"
      }
    }
  }
}

Ответ

HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "error": {
    "code": "ErrorSendAsDenied",
    "message": "The user account which was used to submit this request does not have the right to send mail on behalf of the specified sending account. Cannot submit message.",
    "innerError": {
      "request-id": "24e7991e-01ae-4cc2-8e06-532a96fd8948",
      "date": "2019-01-16T18:53:25"
    }
  }
}

Дальнейшие действия