使用.NET GraphServiceClient从邮箱发送邮件。

问题描述 投票:0回答:1

场景。控制台应用需要从定义的邮箱发送邮件。在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 microsoft-graph
1个回答
1
投票

我已经在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);
© www.soinside.com 2019 - 2024. All rights reserved.