3

有谁知道如何通过没有登录用户运行的应用程序请求使用 Graph API 发送电子邮件的权限?

我有一个有权使用 Microsoft Graph 发送电子邮件的 Azure WebApp。在 Azure 门户(Azure Active Directory -> 应用程序注册 -> MyApp - API 权限)中,我的应用程序已授予权限Mail.Send(类型:应用程序:描述:以任何用户身份发送邮件)。

在下一步中,我将邀请我的组织中的用户。在 Azure Ad 中,用户类型是来宾。我在该帐户上收到一封电子邮件以接受邀请。我可以通过 Microsoft 登录页面使用该帐户登录,但该帐户由我的组织管理 - 它不是我创建的帐户。

将该帐户与 MS Graph 浏览器一起使用,我可以发送电子邮件,但我想在未登录的情况下从我的应用程序中执行相同操作。目的是仅将此帐户用于发送电子邮件。

我能够获取访问令牌、使用 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();

用户 ID likef5521fbc-481e-4e90-9166-33a64eb8f7e9取自 azure 门户,在用户详细信息中有一个 Object ID 字段

4

1 回答 1

3

以用户身份发送电子邮件时,用户需要有一个与之关联的邮箱。

没有包含 Exchange Online 的许可证的用户以及外部用户(例如受邀用户)通常在租户中没有邮箱,因此将无法发送电子邮件。

于 2019-05-13T13:38:56.533 回答