替换 .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 个字符。使用的字符包括 A-Z 和 0-9。
.OFT 模板示例
我已经复制了你的项目部分。
但它正在工作。
我的项目和 .oft 文件上传到 Google Drive。
您可以 运行 并测试。
如果您在自己的解决方案中犯了任何愚蠢的错误,请查看我的解决方案。
如果还是不行那么...
最终解决方案:
可能是因为 Visual Studio 愚蠢的缓存或其他问题。
解决尝试:
- 尝试清理您的解决方案,然后重建。
- 如果不起作用,则 关闭 Visual Studio 的所有实例并
然后再次开始。
- 如果还是不行,请重启电脑。
Replace 函数 returns 一个新字符串,其中使用未指定的提供的比较类型,将当前实例中所有出现的指定字符串替换为另一个指定的字符串。我建议检查 Replace
函数使用的实际值,并使用比较类型来指定 Compare(String, String)
和 [=12= 的某些重载使用的文化、大小写和排序规则] 方法。
另一方面是您没有从 Replace
函数返回格式正确的 HTML 字符串。因此,它无法更新消息正文。您要设置什么值而不是占位符?
因为你的占位符看起来像 string.Format
's zero-based indexed placeholders, you can just use string.Format
。你会得到更好的表现。
我正在尝试替换 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 模板示例
我已经复制了你的项目部分。
但它正在工作。
我的项目和 .oft 文件上传到 Google Drive。
您可以 运行 并测试。
如果您在自己的解决方案中犯了任何愚蠢的错误,请查看我的解决方案。
如果还是不行那么...
最终解决方案:
可能是因为 Visual Studio 愚蠢的缓存或其他问题。
解决尝试:
- 尝试清理您的解决方案,然后重建。
- 如果不起作用,则 关闭 Visual Studio 的所有实例并 然后再次开始。
- 如果还是不行,请重启电脑。
Replace 函数 returns 一个新字符串,其中使用未指定的提供的比较类型,将当前实例中所有出现的指定字符串替换为另一个指定的字符串。我建议检查 Replace
函数使用的实际值,并使用比较类型来指定 Compare(String, String)
和 [=12= 的某些重载使用的文化、大小写和排序规则] 方法。
另一方面是您没有从 Replace
函数返回格式正确的 HTML 字符串。因此,它无法更新消息正文。您要设置什么值而不是占位符?
因为你的占位符看起来像 string.Format
's zero-based indexed placeholders, you can just use string.Format
。你会得到更好的表现。