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

How to send email from any one email using Microsoft Graph

我正在使用 Microsoft Graph 发送电子邮件。我想从 Active Directory 中存在的任何电子邮件发送这封电子邮件。 我已经获得了 Mail.Send 的权限,并获得了 Azure.So 的管理员同意,所有这些都在 Azure 级别上进行了访问和权限设置。

现在开始写代码。我已经搜索过,但无法弄清楚如何调用 Microsoft graph api 来发送电子邮件。下面是我在搜索时找到的代码。我如何替换下面的代码以将电子邮件发送给任何人,从 Azure AD 中的任何人到 Azure AD 中的任何人。还有发送电子邮件的代码 'Send AS'.

  await graphClient.Me.Messages
              .Request()
                .AddAsync(message);

您可以通过这种方式发送其他用户的邮件。

var message = new Message
{
    Subject = "Subject",
    Body = new ItemBody
    {
        ContentType = BodyType.Text,
        Content = "Content"
    },
    ToRecipients = new List<Recipient>()
    {
        new Recipient
        {
            EmailAddress = new EmailAddress
            {
                Address = "john.doe@contoso.onmicrosoft.com"
            }
        }
    }
};

var saveToSentItems = false;

await graphClient.Users["userId"]
    .SendMail(message,saveToSentItems)
    .Request()
    .PostAsync();

userId 是用户的唯一标识符。您可以使用 userPrincipalName 而不是 userId。 UPN 是基于 Internet 标准 RFC 822 的用户的 Internet 样式登录名。按照惯例,这应映射到用户的电子邮件名称。

资源:

Send mail

User resource

The intention is the signed in user will not send email from his email address, the email notification will be asthmatically sent by someone else name to someone.

那我想你想给你的用户提供一个发送邮件,用户可以选择谁接收邮件,但是所有的邮件都应该发送给一个特定的帐户,比如admin@xxx.onmicrosoft.com,那么你应该知道关于发送电子邮件的一些事情 api.

如@user2250152 所述,await graphClient.Users["userId"],这里的 userId 表示谁发送电子邮件,因为您的要求是从一个特定的电子邮件地址发送所有电子邮件,它应该硬编码为 admin@xxx.onmicrosoft.com.

接下来是如何发送电子邮件,调用 ms graph api 应该提供一个访问令牌,因为您的要求是通过应用程序而不是每个用户发送电子邮件,所以恐怕客户端凭据flow 是一个更好的选择,这样当场景出现 sending email from several specific email addresses 时,您就不需要更改 flow 了。现在您需要要求您的租户管理员在 Azure 广告中添加 Mail.Send Application 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();