无法使用Microsoft Graph SDK发送电子邮件

时间:2020-11-05 16:32:45

标签: c# azure microsoft-graph-api microsoft-graph-sdks microsoft-graph-mail

我遵循了以下步骤:

  1. 我在Azure中创建了一个应用注册。
  2. 进入证书和秘密,并创建一个新的客户秘密。
  3. 在API权限中,为所有Mail。*权限名称赋予Delegated权限。
  4. 然后我点击了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."

我已授予所有权限。我想念什么?

1 个答案:

答案 0 :(得分:1)

由于使用的是客户端凭据流,因此需要在Azure门户上使用应用程序权限。请添加Mail.Send Application权限,它将起作用。

删除“我”并添加Users ['Userid'],因为“我”谈论的是已登录的用户,我们在这里没有任何用户。

Userid是Azure AD中的用户对象ID。您也可以使用userPrincipalname进行测试。您可以使用/users endpoint来获取用户的用户ID,并使用displayname或userPrincipalname进行过滤。

相关问题