You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:30:51