从服务帐户使用 Graph API 发送电子邮件

2024-05-29

我正在 ASP.NET Core 5 (C#) 中执行任务,需要使用 Graph API 发送电子邮件,我参考了以下文章并在 Azure 试用帐户上进行了配置,并且能够发送电子邮件。

使用 .NET 通过 Microsoft Graph 发送电子邮件 https://zimmergren.net/sending-e-mails-using-microsoft-graph-using-dotnet/

这是发送电子邮件的代码:

//send email
var client = await GetAuthenticatedGraphClient();
    
await client.Users[senderObjectId]
                  .SendMail(graphMailMessage, true)
                  .Request()
                  .PostAsync();

senderObjectId- 来自配置的对象 ID

我们在客户端的 Azure 帐户上部署了相同的代码,我们需要服务帐户的用户对象 ID,并将其用作发件人的电子邮件 ID。然而,客户回来说该帐户不是 Azure AD 的一部分,而是一个服务帐户。有没有一种方法可以在不使用用户对象 ID 的情况下发送电子邮件。


这是采用邮件发送参数的方法。此外,它还分隔了 (comma) 邮件并将其发送给多个用户

    public string SendEmail(string fromAddress, string toAddress, string CcAddress, string subject, string message, string tenanatID , string clientID , string clientSecret)
    {
            try
            {

                var credentials = new ClientSecretCredential(
                                    tenanatID, clientID, clientSecret,
                                new TokenCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud });
                GraphServiceClient graphServiceClient = new GraphServiceClient(credentials);


                string[] toMail = toAddress.Split(',');
                List<Recipient> toRecipients = new List<Recipient>();
                int i = 0;
                for (i = 0; i < toMail.Count(); i++)
                {
                    Recipient toRecipient = new Recipient();
                    EmailAddress toEmailAddress = new EmailAddress();

                    toEmailAddress.Address = toMail[i];
                    toRecipient.EmailAddress = toEmailAddress;
                    toRecipients.Add(toRecipient);
                }

                List<Recipient> ccRecipients = new List<Recipient>();
                if (!string.IsNullOrEmpty(CcAddress))
                {
                    string[] ccMail = CcAddress.Split(',');
                    int j = 0;
                    for (j = 0; j < ccMail.Count(); j++)
                    {
                        Recipient ccRecipient = new Recipient();
                        EmailAddress ccEmailAddress = new EmailAddress();

                        ccEmailAddress.Address = ccMail[j];
                        ccRecipient.EmailAddress = ccEmailAddress;
                        ccRecipients.Add(ccRecipient);
                    }
                }
                var mailMessage = new Message
                {
                    Subject = subject,

                    Body = new ItemBody
                    {
                        ContentType = BodyType.Html,
                        Content = message
                    },
                    ToRecipients = toRecipients,
                    CcRecipients = ccRecipients

                };
                // Send mail as the given user. 
                graphServiceClient
                   .Users[fromAddress]
                    .SendMail(mailMessage, true)
                    .Request()
                    .PostAsync().Wait();

                return "Email successfully sent.";

            }
            catch (Exception ex)
            {

                return "Send Email Failed.\r\n" + ex.Message;
            }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从服务帐户使用 Graph API 发送电子邮件 的相关文章

  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 找不到 securityToken 的有效键映射

    我正在开发测试应用程序 用于在 MVC ASP net Visual studio 2013 中显示经过身份验证的身份声明 我已通过以下方式从活动目录进行身份验证 1 在解决方案中添加新的mvc项目 2 单击更改身份验证 3 选择组织账户

随机推荐

  • 在 String 值之后打印 int 值

    我有以下示例代码 int pay 80 int bonus 65 System out println pay bonus bonus pay 有人可以向我解释一下为什么我得到以下输出 145 6580 您的代码正在从左到右解释表达式 pa
  • 如何从字符串中分离字符和数字部分

    例如 我想分开 OS234 to OS and 234 AA4230 to AA and 4230 我使用了以下简单的解决方案 但我确信应该有一个更有效和更强大的解决方案 private void demo string cell ABCD
  • 使用机器人框架进行 ATDD

    我想听听其他人使用 Robot Framework 进行自动化验收测试的经验 它的主要优点和缺点是什么以及与其他框架 主要是 Fitnesse 和 Selenium 的比较 将测试的代码是实时的遗留代码 主要是 C 语言 在我撰写本文时 我
  • 如何使用r中的dplyr在特定位置插入空白行

    我想在数据框中的特定位置插入空白行 我的数据框是这样的 dat lt data frame group c rep A 1 rep B 4 rep C 2 rep D 2 group 1 A 2 B 3 B 4 B 5 B 6 C 7 C
  • 将应用程序部署到 IBM liberty Profile 时执行 CICS 请求时出错

    我有一个应用程序 如果我将它 在我的本地 部署到 WAS 中 它可以完美运行 但是 如果将其部署到 IBM J9 VM 版本 pwa6470 27sr2fp10 20141218 02 SR2 FP10 中的 Liberty Profile
  • aws log get-log-events --log-group-name 问题

    我尝试使用 aws 日志检索日志 但 aws cli 命令未正确处理日志组名称 aws logs get log events log group name aws lambda mySkillName log stream name 20
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 从数组中查找三角形

    给出由 N 个整数组成的零索引数组 A 三元组 P Q R 是三角形 如果且 A P A Q gt A R A Q A R gt A P A R A P gt A Q 例如 考虑数组 A 使得 A 0 10 A 1 2 A 2 5 A 3
  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • 在 python matplotlib 中用多种颜色填充多边形

    我正在使用 matplotlib 绘制多边形补丁 并希望表示每个多边形的部分以特定颜色填充 即制作一个饼图 但形状为三角形 正方形或六边形 有没有办法改变饼图的形状或表示多边形的多种填充颜色 Thanks 更新 这是我的意思的模拟 您可以创
  • 如何在 Kotlin 中的数据类上实现空对象模式?

    我有一个 Kotlin 数据类 data class PaymentAccount val accountId Int val accountNumber String val title String 这就是我在 Java 中要做的事情
  • LibGDX纹理混合与OpenGL混合功能

    在 libGdx 中 我试图创建一个成形纹理 采用完全可见的矩形纹理并将其遮罩以获得成形纹理 如下所示 在这里我在矩形上测试它 但我想在任何形状上使用它 我调查过本教程 http www learnopengles com tag addi
  • Firebase 查询双重嵌套

    鉴于 firebase 中的以下数据结构 我想运行查询来检索博客 efg 我目前不知道用户 ID Users 1234567 name Bob blogs abc zyx 7654321 name Frank blogs efg hij F
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • Selenium:将 Internet Explorer 中的文件下载到指定文件夹,无需直接链接,无需 Windows 窗体,无需 AutoIt 或 Robot

    我经常遇到一个问题 如何在 IE 中下载文件 与 Firefox 的 Chrome 不同 您不能只指定所需的文件夹 所有文件都会下载到该文件夹 您还需要与本机 Windows 表单等进行交互 有多种选项 例如使用 AutoIt 使用键盘命令
  • 我的用户代理中的 MATM 是什么

    我的统计数据中最常用的 IE 用户代理是 Mozilla 5 0 compatible MSIE 10 0 Windows NT 6 1 WOW64 Trident 6 0 MATM Mozilla 5 0 compatible MSIE
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 从服务帐户使用 Graph API 发送电子邮件

    我正在 ASP NET Core 5 C 中执行任务 需要使用 Graph API 发送电子邮件 我参考了以下文章并在 Azure 试用帐户上进行了配置 并且能够发送电子邮件 使用 NET 通过 Microsoft Graph 发送电子邮件