如何在C#发送邮件时先显示描述再展示HTML文件?
解决方案:C#发送邮件先显示描述文本再展示HTML内容
嗨,我来帮你搞定这个需求!你想要邮件里先显示那段客户描述文本,再展示HTML格式的发票内容,对吧?因为你已经把IsBodyHtml设为true了,直接把纯文本描述转换成HTML格式后和发票HTML拼接就行,这样邮件客户端就能正确解析并按顺序显示内容了。
修改后的代码示例
string emailFrom = "abc@hotmail.com"; string emailTo = "test@company.com.my"; string emailSubject = "e-Receipt"; // 将纯文本描述转换为HTML格式,用<p>标签保证排版,换行用分段实现 string emailDescription = "<p>Dear Customer,</p><p>Attached is your e-Receipt. Thank You.</p>"; // 使用using语句自动释放StreamReader资源,避免内存泄漏 string htmlInvoiceContent; using (StreamReader reader = File.OpenText("C:/file/invoice.html")) { htmlInvoiceContent = reader.ReadToEnd(); } // 拼接描述文本和HTML发票内容,作为最终邮件正文 string emailBody = emailDescription + htmlInvoiceContent; MailMessage message = new MailMessage(emailFrom, emailTo, emailSubject, emailBody); message.IsBodyHtml = true; // 继续处理你的Attachment逻辑...
关键说明
- HTML格式转换:因为
IsBodyHtml设为true,邮件客户端会按HTML规则渲染内容,所以纯文本的换行不会生效,需要用<p>标签分段或者<br>标签换行来保证描述的排版正确。 - 资源管理:用
using语句包裹StreamReader,能确保文件流在使用后自动关闭释放,这是C#里处理IO资源的最佳实践。 - 拼接逻辑:如果你的HTML发票本身包含完整的
<html>/<body>结构,简单拼接也能正常显示;如果需要更严谨的结构,可以读取HTML后找到<body>标签的位置,把描述文本插入到<body>内部的开头位置,不过大多数邮件客户端对这种直接拼接的兼容性都很好。
内容的提问来源于stack exchange,提问作者sigmax bpo




