Jas*_*ita 6 email asp.net-core microsoft-graph-sdks microsoft-graph-api
我正在使用 microsoft graph 发送电子邮件。我想从 Active Directory 中存在的任何电子邮件发送此电子邮件。我已经获得了 Mail.Send 的权限,并获得了 Azure 的管理员同意。因此,所有设置都在 Azure 级别上进行访问和权限设置。
现在该讲代码了。我已经搜索过,但无法弄清楚如何调用 Microsoft graph api 来发送电子邮件。下面是我在搜索时找到的代码。如何替换以下代码以将电子邮件从 Azure AD 中的任何人发送到 Azure AD 中的任何人。还有发送电子邮件“Send AS”的代码。
await graphClient.Me.Messages
.Request()
.AddAsync(message);
Run Code Online (Sandbox Code Playgroud)
dav*_*rey 15
请注意,自 Graph API v. 5.0(2023 年 3 月)以来,Microsoft 引入了一项令人讨厌的重大更改,并且没有详细记录(除了此处模糊不清)。
现在,SendMail不能再用作用户的方法。如果您尝试这样做,您将得到一个 CS1955 Non-invocable member can not be use 就像方法编译器错误。
你必须做这样的事情:
// Your old Message object definition
Microsoft.Graph.Models.Message msg = new()
{
From = ...,
ToRecipients = ...,
Subject = "...",
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = "..."
}
};
Microsoft.Graph.Users.Item.SendMail.SendMailPostRequestBody body = new()
{
Message = msg,
SaveToSentItems = false // or true, as you want
};
try
{
await graphClient.Users["your user GUID"]
.SendMail
.PostAsync(body);
}
catch (Exception ex)
{
// log your exception here
}
Run Code Online (Sandbox Code Playgroud)
目的是登录的用户不会从他的电子邮件地址发送电子邮件,电子邮件通知将通过其他人的名字发送给某人。
那么我想你想向你的用户提供一个发送电子邮件,用户可以选择谁接收电子邮件,但所有电子邮件都应该发送到一个特定的帐户,例如admin@xxx.onmicrosoft.com,那么你应该了解一些关于发送电子邮件 api 的知识。
正如@user2250152提到的,await graphClient.Users["userId"]这里userId指的是发送电子邮件的人,因为您的要求是从一个特定的电子邮件地址发送所有电子邮件,所以它应该硬编码为admin@xxx.onmicrosoft.com。
接下来是如何发送电子邮件,调用 ms graph api 应该提供访问令牌,因为您的要求是由应用程序而不是每个用户发送电子邮件,所以我担心客户端凭证流是更好的选择,这样当场景到了sending email from several specific email addresses,就不需要改变流程了。现在,您需要要求租户管理员Mail.Send Application在 azure ad 中添加 api 权限才能使用此类流程。
这是代码:
using Azure.Identity;
using Microsoft.Graph;
var mesg = new Message
{
Subject = "Meet for lunch?",
Body = new ItemBody
{
ContentType = BodyType.Text,
Content = "The new cafeteria is open."
},
ToRecipients = new List<Recipient>
{
new Recipient
{
EmailAddress = new EmailAddress
{
//who will receive the email
Address = "xxx@gmail.com"
}
}
},
Attachments = new MessageAttachmentsCollectionPage()
};
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "your_tenant_name.onmicrosoft.com";
var clientId = "azure_ad_app_client_id";
var clientSecret = "client_secret_for_the_azuread_app";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
await graphClient.Users["user_id_which_you_wanna_used_for_sending_email"].SendMail(mesg, false).Request().PostAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6980 次 |
| 最近记录: |