【问题标题】:Replacing multiple strings in a .oft Outlook email template not working as expected替换 .oft Outlook 电子邮件模板中的多个字符串未按预期工作
【发布时间】:2021-06-30 05:15:44
【问题描述】:

我正在尝试替换 Outlook 电子邮件模板文件 (.oft) 中的多个值。

我确实在提交之间的某个时间点有这个工作,不完全确定是什么导致了我的问题。

据我了解,HTMLBody 需要保留格式。

问题是只有最后两个 .Replace 实例在起作用

void BtnGenerateClick(object sender, EventArgs e)
{
    Outlook.Application emailApp = new Outlook.Application();
    Outlook.MailItem createTemplate = emailApp.CreateItemFromTemplate("C:\\Users\\USERNAME\\Documents\\OFTFiles\\test-template.oft") as Outlook.MailItem;
    createTemplate.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
    createTemplate.Subject = "Test Email sent " + '\u0040' + " " + tbTime.Text + " on " + currentDate;
            
    /* START Replace Text from Numeric Up Down Value Property  */
    var changed0 = createTemplate.HTMLBody.Replace("{0}",nud0.Value.ToString());
    createTemplate.HTMLBody = changed0;
            
    var changed1 = createTemplate.HTMLBody.Replace("{1}",nud1.Value.ToString());
    createTemplate.HTMLBody = changed1;
            
    var changed2 = createTemplate.HTMLBody.Replace("{2}",nud2.Value.ToString());
    createTemplate.HTMLBody = changed2;
            
    var changed3 = createTemplate.HTMLBody.Replace("{3}",nud3.Value.ToString());
    createTemplate.HTMLBody = changed3;
            
    var changed4 = createTemplate.HTMLBody.Replace("{4}",nud4.Value.ToString());
    createTemplate.HTMLBody = changed4;
            
    var changed5 = createTemplate.HTMLBody.Replace("{5}",nud5.Value.ToString());
    createTemplate.HTMLBody = changed5;
            
    var changed6 = createTemplate.HTMLBody.Replace("{6}",nud6.Value.ToString());
    createTemplate.HTMLBody = changed6;
    /* END Replace Text from Numeric Up Down Value Property */

    /* START Replace Text from Textbox Text Property */
    var changed7 = createTemplate.HTMLBody.Replace("{7}",tb7.Text);
    createTemplate.HTMLBody = changed7;
            
    var changed8 = createTemplate.HTMLBody.Replace("{8}",tb8.Text);
    createTemplate.HTMLBody = changed8;
            
    var changed9 = createTemplate.HTMLBody.Replace("{9}",tb9.Text);
    createTemplate.HTMLBody = changed9;
            
    var changed10 = createTemplate.HTMLBody.Replace("{10}",tb10.Text);
    createTemplate.HTMLBody = changed10;
            
    var changed11 = createTemplate.HTMLBody.Replace("{11}",tb11.Text);
    createTemplate.HTMLBody = changed11;
    /* END Replace Text from Textbox Text Property */
            
    createTemplate.Display(createTemplate);
            
}

数字上下波动
nud0 到 nud5 是默认的 numericUpDowns,最大值为 9999。nud6 已修改为小数点后 1 位,最大值为 100。

文本框
tb7 到 tb11 都是默认的,限制为 15 个字符。使用的字符包括 A-Z 和 0-9。

.OFT 模板示例

【问题讨论】:

  • 在问题中提供模板正文、下拉值和文本字段值。
  • 编辑添加这些。目前非常基础(概念证明)。
  • 您能否也将createTemplate.HTMLBody 作为sn-p 添加到问题中。
  • 没有sn-p。 HTMLBody 是 Microsoft.Office.InterOp.Outlook 中 MailItem 接口的一个属性

标签: c# .net winforms c#-5.0


【解决方案1】:

由于您的占位符看起来像string.Format's zero-based indexed placeholders,您可以只使用string.Format。您将获得更好的性能。

【讨论】:

    【解决方案2】:

    Replace 函数返回一个新字符串,其中使用提供的未指定的比较类型将当前实例中出现的所有指定字符串替换为另一个指定字符串。我建议检查用于Replace 函数的实际值,并使用比较类型来指定Compare(String, String)Equals(Object) 方法的某些重载要使用的文化、大小写和排序规则。

    另一方面是您没有从Replace 函数返回格式良好的HTML 字符串。因此,它无法更新消息正文。您要设置什么值而不是占位符?

    【讨论】:

      【解决方案3】:

      我已经复制了你项目的一部分。

      但它正在工作。

      我的项目和 .oft 文件上传到 Google Drive

      您可以运行和测试。

      如果你犯了任何愚蠢的错误,请查看我的解决方案。

      如果还是不行的话……

      终极解决方案:

      可能是因为 Visual Studio 的愚蠢缓存或其他问题。

      解决尝试:

      1. 尝试清理您的解决方案,然后重建
      2. 如果不起作用,则关闭 Visual Studio 的所有实例,然后 然后重新开始
      3. 如果仍然无法正常工作,请重新启动您的 PC。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 2015-02-22
        • 2021-11-30
        • 2012-11-28
        • 2017-06-19
        • 2019-08-01
        • 2017-12-11
        • 2023-03-13
        相关资源
        最近更新 更多