如何使用 Microsoft Graph 从任意一封电子邮件发送电子邮件

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)


Tin*_*ang 3

目的是登录的用户不会从他的电子邮件地址发送电子邮件,电子邮件通知将通过其他人的名字发送给某人。

那么我想你想向你的用户提供一个发送电子邮件,用户可以选择谁接收电子邮件,但所有电子邮件都应该发送到一个特定的帐户,例如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)