如何在基于模板生成的Outlook邮件正文中设置文本为粗体?
在Outlook邮件模板中设置部分文本为粗体的解决方案
看起来你已经在通过模板创建Outlook邮件,现在需要把特定内容(比如CustomerName和ReportName)设置成粗体对吧?这里有两种常用的实现方式,根据你的邮件模板格式来选:
方法1:通过HTMLBody替换占位符(适合HTML格式模板)
如果你的邮件模板是HTML格式的,直接修改HTML内容是最直接的方式。假设你的模板里已经预留了占位符(比如{CustomerName}和{ReportName}),可以这样替换并添加粗体标签:
foreach (XmlNode node in nodeList) { string CustomerName = node.SelectSingleNode("CustomerName").InnerText; string ReportName = node.SelectSingleNode("ReportName").InnerText + ".pdf"; Outlook.Application mailApplication = new Outlook.Application(); Outlook.MailItem mail = mailApplication.CreateItemFromTemplate(@"d:\Friday Report\#TEMPLATES\template.oft") as Outlook.MailItem; // 替换占位符并添加粗体标签 mail.HTMLBody = mail.HTMLBody .Replace("{CustomerName}", $"<b>{CustomerName}</b>") .Replace("{ReportName}", $"<b>{ReportName}</b>"); // 后续操作:显示或发送邮件 mail.Display(true); // true表示以模态窗口显示 // mail.Send(); }
注意点:
- 确保你的模板是HTML格式(创建模板时选择"HTML"作为格式),否则HTMLBody的修改可能不会生效。
- 如果模板里没有明确的占位符,你需要先定位到要替换的文本内容,再进行替换操作。
方法2:通过Word对象模型设置文本格式(适合RTF/Word编辑器模式)
如果你的邮件模板使用的是RTF格式或者默认的Word编辑器,可以利用Outlook的Word对象模型来找到目标文本并设置粗体:
foreach (XmlNode node in nodeList) { string CustomerName = node.SelectSingleNode("CustomerName").InnerText; string ReportName = node.SelectSingleNode("ReportName").InnerText + ".pdf"; Outlook.Application mailApplication = new Outlook.Application(); Outlook.MailItem mail = mailApplication.CreateItemFromTemplate(@"d:\Friday Report\#TEMPLATES\template.oft") as Outlook.MailItem; // 激活Word编辑器(必须先显示邮件才能操作) mail.Display(false); // false表示后台打开,用户不可见 Word.Document doc = mail.GetInspector.WordEditor; // 查找CustomerName并设置粗体 Word.Range range = doc.Content.Find.Execute(CustomerName); if (range != null && range.Find.Found) { range.Bold = 1; // 1表示启用粗体,0表示取消粗体 } // 查找ReportName并设置粗体 range = doc.Content.Find.Execute(ReportName); if (range != null && range.Find.Found) { range.Bold = 1; } // 后续操作 // mail.Send(); }
注意点:
- 需要在项目中引用
Microsoft.Office.Interop.Word程序集才能使用Word对象模型。 - 如果目标文本在邮件中重复出现,
Find.Execute只会匹配第一个结果,若要处理所有匹配项,可以循环执行查找直到找不到为止。 - 处理完邮件后记得释放COM对象,避免内存泄漏:
Marshal.ReleaseComObject(doc); Marshal.ReleaseComObject(mail); Marshal.ReleaseComObject(mailApplication);
额外提示
你可以通过mail.BodyFormat属性查看当前邮件的格式类型,它会返回OlBodyFormat枚举值(如olFormatHTML、olFormatRichText等),帮助你选择最合适的实现方式。
内容的提问来源于stack exchange,提问作者Tosik
相关产品推荐
相关产品推荐

