我有一个用C#编写的应用程序,它使用Outlook Interop打开一个新的邮件消息,预先填写用户可以在手动发送之前编辑的详细信息。
var newMail = (Outlook.MailItem)outlookApplication.CreateItem(
Outlook.OlItemType.olMailItem);
newMail.To = "example@exam.ple";
newMail.Subject = "Example";
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
newMail.HTMLBody = "<p>Dear Example,</p><p>Example example.</p>";
newMail.Display(false);
当同一用户手动创建新消息时,字体将设置为 Calibri 或用户将其设置为默认字体。问题是自动电子邮件中的文本显示在我们不想要的 Times New Roman 字体中。
如果我查看其中一封已发送的电子邮件的来源,我可以看到Outlook已明确设置电子邮件来源中的字体:
// Automated
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";
}
// Manual
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
}
为什么格式不同,如何让自动电子邮件使用用户默认设置?我正在使用互操作程序集的第11版,因为安装了Outlook 2003和2007.
答案 0 :(得分:6)
这令人非常沮丧。
当您解决Google问题时,无数答案会告诉您只需样式 CSS中的文本即可。 Yeeessss,很好,如果您正在生成完整的电子邮件并可以设置/控制整个文本。但在你的情况下(和我们的),目的是用一些初始文本启动电子邮件,最终用户添加他自己的文本。这是他在Times New Roman中不断提出的附加文本。
我们找到的解决方案是从另一个方向解决问题。这就是将Outlook中的基本/底层默认值修复为我们选择的字体而不是Times New Roman。
可以通过以下方式完成:
视频在这里:
http://www.youtube.com/watch?v=IC2RvfoMFz8
如果您需要以编程方式控制或更改字体,我感谢您的帮助。但是,对于那些只是希望基本电子邮件字体不的客户,无论何时通过代码生成电子邮件都是Times New Roman,这可能会有所帮助。
答案 1 :(得分:2)
由于它是HTML电子邮件,因此您可以轻松地将所需的任何样式嵌入到实际的HTML正文中。我怀疑这是Outlook从Outlook GUI创建消息时所做的事情。
我实际上并不知道如何获取用户设置。我查看了Outlook API(它是一个奇怪的野兽),但没有看到任何可以访问默认消息属性的内容。
答案 2 :(得分:0)
根据我的经验,创建电子邮件会使用默认电子邮件设置。
您正在将newMail.HTMLBody设置为一个值,而不是将HTML插入其中。 我敢打赌,如果你检查HTMLBody的内容,它会从它的内容开始,比如css代码
但是,无论何时,当您尝试从其中一个电子邮件值进行阅读时,您的用户都会收到安全弹出窗口,上面写着“程序正在尝试访问...请等等。”
我试图维护用户的签名时碰到了这个,在没有触发安全提示的情况下找不到一个很好的方法来获取它。