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

如何在基于模板生成的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:44:54