【发布时间】:2021-01-28 10:06:33
【问题描述】:
我创建了一个 C# 控制台应用程序来使用 Microsoft Graph API 发送电子邮件。添加 Mail.Send Application 权限后,它工作正常。但是,由于公司的要求,我被要求使用 Mail.Send Delegated 权限,而使用该权限我看不到它工作,我看到这个错误:
在添加 Mail.Send Delegated 权限后,我应该考虑执行哪些步骤才能使其正常工作?
这是我的代码:
static void Main(string[] args)
{
// Azure AD APP
string clientId = "<client Key Here>";
string tenantID = "<tenant key here>";
string clientSecret = "<client secret here>";
Task<GraphServiceClient> callTask = Task.Run(() => SendEmail(clientId, tenantID, clientSecret));
// Wait for it to finish
callTask.Wait();
// Get the result
var astr = callTask;
}
public static async Task<GraphServiceClient> SendEmail(string clientId, string tenantID, string clientSecret)
{
var confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantID)
.WithClientSecret(clientSecret)
.Build();
var authProvider = new ClientCredentialProvider(confidentialClientApplication);
var graphClient = new GraphServiceClient(authProvider);
var message = new Message
{
Subject = subject,
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = content
},
ToRecipients = new List<Recipient>()
{
new Recipient
{
EmailAddress = new EmailAddress { Address = recipientAddress }
}
}
};
var saveToSentItems = true;
await _graphClient.Users[<userprincipalname>]
.SendMail(message, saveToSentItems)
.Request()
.PostAsync();
return graphClient;
}
更新:
根据下面的回答,我更新代码如下:
var publicClientApplication = PublicClientApplicationBuilder
.Create("<client-id>")
.WithTenantId("<tenant-id>")
.Build();
var authProvider = new UsernamePasswordProvider(publicClientApplication);
var secureString = new NetworkCredential("", "<password>").SecurePassword;
User me = await graphClient.Me.Request()
.WithUsernamePassword("<username>", secureString)
.GetAsync();
我启用了“允许公共客户端流”来修复异常。
现在我看到另一个异常:权限不足,无法完成操作。
我错过了什么?
更新:目前我看到这个异常,代码没有变化:
【问题讨论】:
标签: azure-active-directory microsoft-graph-api