c# - 无法使用 Microsoft Graph SDK 发送电子邮件
问题描述
我按照以下步骤操作:
- 我在 Azure 中创建了一个应用注册。
- 进入证书和机密并创建一个新的客户端机密。
- 在 API 权限中,授予所有 Mail.* 权限名称的 Delegated 权限。
- 然后我点击了
Grant admin consent for {my org}
。
在我的代码(.net 核心控制台应用程序)中,我编写了以下内容:
var clientId = "23fff856-***";
var tenantId = "6f541345-***";
var clientSecret = "_Sir**(";
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantId)
.WithClientSecret(clientSecret)
.Build();
var authProvider = new ClientCredentialProvider(confidentialClientApplication);
var graphClient = new GraphServiceClient(authProvider);
var message = new Message
{
Subject = "my subject",
Body = new ItemBody {ContentType = BodyType.Text, Content = "body"},
ToRecipients = new List<Recipient>
{
new Recipient
{
EmailAddress = new EmailAddress{Address = "foo@gmail.com"}
}
}
};
await GraphClient.Me
.SendMail(message, true)
.Request()
.PostAsync();
这会导致错误:
"code":"NoPermissionsInAccessToken",
"message":"The token contains no permissions, or permissions can not be understood."
我已授予所有权限。我错过了什么?
解决方案
由于您使用的是客户端凭据流,因此您需要在 Azure 门户上使用应用程序权限。请添加 Mail.Send Application 权限,它将起作用。
删除 'Me' 并添加 Users['Userid'] 因为 'Me' 谈论登录用户,我们这里没有任何用户。
Userid 是 Azure AD 中的用户对象 ID。您还可以使用 userPrincipalname 进行测试。您可以使用/users 端点获取用户的用户 ID,并使用 displayname 或 userPrincipalname 进行过滤。
推荐阅读
- javascript - 为特定元素计数在打印时创建分页符
- spring - Spring批处理远程分区| 可以在没有完成从属步骤的情况下完成主步骤
- google-sheets-formula - 新行的脚本并复制根据行索引自动增加的公式?
- javascript - 如何生成名称的选择下拉列表并在 javascript 或 jquery 中使用 optgroup 对它们进行分组?
- python - 错误 ValueError:执行字符串估计器时 int () 以 10 为底的无效文字。火车 (input_fn=train_input_fn)
- amazon-web-services - 无服务器部署到暂存域名
- c - 如何将链表作为函数参数发送
- python - ctypes.CDLL() 和 ctypes.cdll.LoadLibrary() 有什么区别?
- apache-spark - 仅使用单个元素的 RDD 上的 PySpark Reduce
- python - 如何根据原始数据框的不同类创建新数据框?