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
相关产品推荐
相关产品推荐

