使用Microsoft graph API工作帐户发送电子邮件

时间:2019-05-13 10:55:08

标签: c# azure-active-directory microsoft-graph microsoft-graph-mail

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

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

下一步,我邀请组织中的用户。在Azure广告中,用户类型为Guest。我收到该帐户的电子邮件以接受邀请。 我可以通过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之类的用户ID来自azure门户,在用户详细信息中有一个“对象ID”字段

1 个答案:

答案 0 :(得分:3)

以用户身份发送电子邮件时,该用户需要具有与其关联的邮箱。

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