You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动