c# - 使用 Microsoft 图形 API 工作帐户发送电子邮件

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

有谁知道如何请求允许在没有登录用户的情况下运行的应用程序使用 Graph API 发送电子邮件?

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

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

在 MS Graph 资源管理器中使用该帐户我可以发送电子邮件,但我想在不登录的情况下从我的应用程序执行相同的操作。目的是将该帐户仅用于发送电子邮件。

我能够获取访问 token 、使用 API 并获取用户基本信息,但是当我尝试发送电子邮件时出现异常:

Code: ResourceNotFound

Message: Resource could not be discovered.

// 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 字段

最佳答案

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

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

关于c# - 使用 Microsoft 图形 API 工作帐户发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56110910/

相关文章:

c# - 计时器、事件和垃圾收集 : am I missing something?

c# - 如何使用 Visual Studio 在调试中以管理员身份运行应用程序?

javascript - 修复无效 JSON 的最有效方法

c# - 引用多个 C# 项目时 Firebase 函数构建错误

azure-active-directory - 如何授予服务主体对 Active Directory 组的读取权限?

microsoft-graph-api - 在哪里可以找到驱动器项目的 {parent-id}?

php - 获取消息的 MIME 版本会导致 "405 Method Not Allowed"- 错误

azure - 调用 Get-AzADGroupMember 时权限不足,无法完成操作

使用 .NET Core Web API 进行 Azure AD 身份验证

azure-active-directory - 在 Microsoft Graph 中查找 Azure AD 架构扩展 AppId