繁体   English   中英

替换 .oft Outlook 电子邮件模板中的多个字符串未按预期工作

[英]Replacing multiple strings in a .oft Outlook email template not working as expected

我正在尝试替换 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 个字符。 使用的字符包括 AZ 和 0-9。

.OFT 模板示例
模板正文

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

但它正在起作用。

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

您可以运行和测试。

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

如果还是不行,那么...

终极解决方案:

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

解决尝试:

  1. 尝试清理您的解决方案,然后重建.
  2. 如果不起作用,请关闭Visual Studio 的所有实例,然后重新启动
  3. 如果仍然不起作用,请重新启动您的电脑。

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

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

由于您的占位符看起来像string.Format的从零开始的索引占位符,您可以只使用string.Format 你会从中获得更好的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM