Отправка электронной почты через рабочий аккаунт Microsoft Graph API - PullRequest
1 голос
/ 13 мая 2019

Кто-нибудь знает, как запросить разрешение на отправку электронных писем с помощью Graph API приложением, которое работает без зарегистрированного пользователя?

У меня есть веб-приложение Azure с разрешением отправлять электронную почту с помощью Microsoft Graph. На портале Azure (Azure Active Directory -> Регистрация приложений -> MyApp - разрешения API) мое приложение предоставило разрешение для Mail.Send (Тип: Приложение: Описание: Отправка почты от имени любого пользователя).

На следующем шаге я приглашаю пользователя из моей организации. В Azure Ad тип пользователя - Гость. Я получил письмо на этот счет, чтобы принять приглашение. Я могу войти с этой учетной записью через страницу входа Microsoft, но учетная запись управляется моей организацией - это не учетная запись, созданная мной.

Используя эту учетную запись с MS Graph Explorer, я могу отправить электронное письмо, но я хочу сделать то же самое из своего приложения без входа в систему. Цель состоит в том, чтобы использовать эту учетную запись только для отправки электронных писем.

Мне удалось получить токен доступа, использовать API и получить основную информацию о пользователе, но я получаю исключение при попытке отправить электронное письмо:

Код: ResourceNotFound

Сообщение: ресурс не может быть обнаружен.

// get token
var authContext =
    new AuthenticationContext("https://login.microsoftonline.com/" + tenantID);

var result = await authContext
    .AcquireTokenAsync("https://graph.microsoft.com", new ClientCredential(clientId, secret));

// create graph service
GraphServiceClient graphServiceClientApp =
    new GraphServiceClient("https://graph.microsoft.com/v1.0",
        new DelegateAuthenticationProvider(
            async(requestMessage) =>
            {
                requestMessage.Headers.Authorization =
                    new AuthenticationHeaderValue("bearer", result.AccessToken);
            }));

// create message obj
//.....

// send email
await graphServiceClientApp.Users["f5521fbc-481e-4e90-9166-33a64eb8f7e9"]
    .SendMail(message, false)
    .Request()
    .PostAsync();

Идентификатор пользователя, такой как f5521fbc-481e-4e90-9166-33a64eb8f7e9, взят из портала Azure, в пользовательских данных есть поле Идентификатор объекта

1 Ответ

3 голосов
/ 13 мая 2019

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

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

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