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

C#开发Windows控制台应用如何使用HTML邮件模板替换占位符发邮件

Windows控制台应用使用HTML邮件模板实现方案

1. 配置模板文件的编译规则

  • 在解决方案资源管理器中定位到/MailTemplate/Resignnotify.html文件,右键打开属性面板
  • 将复制到输出目录设置为「如果较新则复制」,生成操作设置为「内容」。如果跳过这步,程序编译后模板文件不会同步到exe运行目录,会触发文件找不到的异常。

2. 核心实现逻辑

整个流程分三步:读取模板原始HTML、替换##包裹的占位符为实际业务值、将替换后的内容作为HTML格式邮件正文发送,完整可运行示例代码如下:

using System;
using System.IO;
using System.Net;
using System.Net.Mail;

namespace MailSendDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 拼接模板的绝对运行路径
            string templateFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MailTemplate", "Resignnotify.html");
            // 读取模板原始内容
            string emailContent = File.ReadAllText(templateFullPath);

            // 替换占位符,这里的取值替换成你实际的业务逻辑即可
            emailContent = emailContent.Replace("##User##", "张三")
                                       .Replace("##AppCom##", "XX科技有限公司")
                                       .Replace("##AppUser##", "李四(部门主管)")
                                       .Replace("##ResignDate##", new DateTime(2024,6,30).ToString("yyyy年MM月dd日"));

            // 发送邮件
            SendEmail(emailContent);
            Console.ReadKey();
        }

        static void SendEmail(string htmlBody)
        {
            using (MailMessage msg = new MailMessage())
            {
                // 发件人配置
                msg.From = new MailAddress("notify@yourcompany.com", "系统通知");
                // 收件人,可多次Add添加多个收件人
                msg.To.Add("zhangsan@yourcompany.com");
                msg.Subject = "离职申请审批通知";
                // 标记正文为HTML格式,否则会直接显示源码
                msg.IsBodyHtml = true;
                msg.Body = htmlBody;

                // SMTP服务配置,替换为你公司/邮箱服务商的实际参数
                using (SmtpClient client = new SmtpClient("smtp.yourcompany.com", 587))
                {
                    client.Credentials = new NetworkCredential("notify@yourcompany.com", "你的邮箱授权码");
                    client.EnableSsl = true;
                    try
                    {
                        client.Send(msg);
                        Console.WriteLine("邮件发送成功");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"发送失败:{ex.Message}");
                    }
                }
            }
        }
    }
}

3. 补充说明

  • 如果你传入的动态内容包含<、>、&、双引号这类HTML特殊字符,替换前需要调用WebUtility.HtmlEncode()对内容转义,避免破坏HTML结构导致排版错乱。
  • 当前的字符串Replace方案仅适合固定占位符的简单模板场景,如果后续需要做条件判断、列表循环这类复杂模板逻辑,可以引入RazorEngine这类轻量模板引擎实现,不需要自己写复杂的解析逻辑。
  • 独立部署程序时,需要将MailTemplate文件夹和内部的html模板文件,和编译生成的exe文件放在同一级目录下,避免路径错误。

内容的提问来源于stack exchange,提问作者georgetovrea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:22:02