场景。控制台应用需要从定义的邮箱发送邮件。在Azure中的所有设置都已完成,应用程序有访问权限,在Postman中一切正常。
问题是如何用微软的库来做同样的事情--尤其是用了 GraphServiceClient
.
注意:例子中没有显示消息主体,因为它与问题无关。
原始请求
POST https://graph.microsoft.com/v1.0/users/<email-address>/sendMail
.NET代码
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.WithClientSecret(secret)
.Build();
ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
await graphClient.Me
.SendMail(message, saveToSentItems)
.Request()
.PostAsync();
我已经在c#.NET中完成了这个工作--这里有一些代码,已经被重构简化了(所以不保证),只是显示了你需要的东西。很明显,你需要用你自己的值来替换魔法字符串。
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request =>
{
var authContext = new AuthenticationContext("https://login.microsoftonline.com/GUID");
var credential = new ClientCredential("GUID", "P@55w0rd");
var authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credential);
request.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);
}));
var user = graphServiceClient.Users["[email protected]"];
var message = GetMailMessage(); // not relevant to question
await user.SendMail(message).Request().PostAsync(new CancellationTokenSource(new TimeSpan(0, 0, 30)).Token);