如何用C# DLL通过SMTP发送支持完整Adaptive Card的邮件?
C# 通过SMTP发送包含Adaptive Card的邮件完整示例
没问题,我刚好有一套完整的C#实现方案,能帮你搞定通过SMTP发送带Adaptive Card的邮件,而且完全支持所有标准Adaptive元素和Actions功能。下面直接上代码和详细说明:
第一步:准备依赖
首先你需要安装AdaptiveCards这个NuGet包,它提供了构建Adaptive Card的强类型对象模型,不用手动写JSON。可以通过Package Manager Console安装:
Install-Package AdaptiveCards
或者直接在Visual Studio的NuGet包管理器里搜索安装即可。System.Net.Mail是.NET框架/核心自带的,不需要额外安装。
第二步:完整代码实现
using AdaptiveCards; using System.Net; using System.Net.Mail; using System.Net.Mime; class AdaptiveCardEmailSender { static void Main(string[] args) { // 1. 构建Adaptive Card对象 var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 5)) { Body = new List<AdaptiveElement> { new AdaptiveTextBlock { Text = "📢 这是一封带Adaptive Card的测试邮件", Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder }, new AdaptiveTextBlock { Text = "下面是一些交互功能演示:", Spacing = AdaptiveSpacing.Medium }, new AdaptiveFactSet { Facts = new List<AdaptiveFact> { new AdaptiveFact("发送者", "C# SMTP服务"), new AdaptiveFact("日期", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) } }, new AdaptiveImage { Url = new Uri("https://adaptivecards.io/content/cats/1.png"), Size = AdaptiveImageSize.Medium, Spacing = AdaptiveSpacing.Medium }, new AdaptiveInputText { Id = "userFeedback", Placeholder = "请输入你的反馈..." } }, Actions = new List<AdaptiveAction> { new AdaptiveOpenUrlAction { Title = "访问Adaptive Cards官网", Url = new Uri("https://adaptivecards.io/") }, new AdaptiveSubmitAction { Title = "提交反馈", Data = new AdaptiveSubmitActionData { {"feedbackType", "email"}, {"timestamp", DateTime.Now.ToString("o")} } } } }; // 2. 将Adaptive Card序列化为JSON字符串 string adaptiveCardJson = adaptiveCard.ToJson(); // 3. 构建邮件内容 var mailMessage = new MailMessage(); mailMessage.From = new MailAddress("your-sender@example.com"); mailMessage.To.Add("recipient@example.com"); mailMessage.Subject = "测试:带Adaptive Card的SMTP邮件"; // 添加降级HTML内容(给不支持Adaptive Card的客户端显示) string fallbackHtml = @" <html> <body> <h1>这是一封带Adaptive Card的邮件</h1> <p>你的邮箱客户端不支持Adaptive Card,请查看以下内容:</p> <ul> <li>发送者:C# SMTP服务</li> <li>日期:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @"</li> </ul> <p><a href='https://adaptivecards.io/'>访问Adaptive Cards官网</a></p> </body> </html>"; var htmlView = AlternateView.CreateAlternateViewFromString(fallbackHtml, null, MediaTypeNames.Text.Html); mailMessage.AlternateViews.Add(htmlView); // 添加Adaptive Card的MIME部分 var adaptiveCardView = AlternateView.CreateAlternateViewFromString(adaptiveCardJson, null, "application/vnd.microsoft.card.adaptive"); mailMessage.AlternateViews.Add(adaptiveCardView); // 4. 配置SMTP客户端并发送 using (var smtpClient = new SmtpClient("smtp.example.com", 587)) { smtpClient.Credentials = new NetworkCredential("your-username@example.com", "your-password"); smtpClient.EnableSsl = true; smtpClient.Send(mailMessage); Console.WriteLine("邮件发送成功!"); } } }
关键细节说明
- 降级处理:必须添加HTML版本的内容,因为像Gmail这类客户端目前还不支持Adaptive Card,这样用户至少能看到基础内容
- Actions支持:示例里包含了
AdaptiveOpenUrlAction(打开外部链接)和AdaptiveSubmitAction(提交数据),后者需要你后端有对应的接收端点来处理提交的参数(比如示例里的userFeedback、feedbackType等) - 元素扩展:所有标准Adaptive元素(比如
AdaptiveContainer、AdaptiveChoiceSetInput等)都可以通过AdaptiveCards库的对象轻松添加,只需要按照对象模型构建即可,和JS/Python的实现逻辑完全对齐 - 版本兼容性:代码里用了Adaptive Schema 1.5版本,这是比较新的稳定版本,支持大部分最新特性,你可以根据需求调整版本号
内容的提问来源于stack exchange,提问作者Adriaan Davel
相关产品推荐
相关产品推荐

