C# Outlook互操作,邮件格式
我有一个用C#编写的应用程序,它使用outlookinterop打开一封新的邮件,其中预先填充了用户可以在手动发送之前编辑的详细信息C# Outlook互操作,邮件格式,c#,email,interop,outlook,stylesheet,C#,Email,Interop,Outlook,Stylesheet,我有一个用C#编写的应用程序,它使用outlookinterop打开一封新的邮件,其中预先填充了用户可以在手动发送之前编辑的详细信息 var newMail = (Outlook.MailItem)outlookApplication.CreateItem( Outlook.OlItemType.olMailItem); newMail.To = "example@exam.ple"; newMail.Subject = "Example"; newMail.BodyFormat = O
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);
为什么格式不同?如何让自动电子邮件使用用户默认设置?我使用的是interop程序集的第11版,因为安装了Outlook 2003和2007的混合版本。由于它是一封HTML电子邮件,您可以轻松地将任何样式嵌入到实际的HTML正文中。我猜想,当您从Outlook GUI创建消息时,Outlook就是这样做的
我实际上不知道如何获得用户设置。我查看了Outlook API(这是一个奇怪的野兽),但没有看到任何可以访问默认邮件属性的内容。根据我的经验,创建电子邮件时确实会使用默认电子邮件设置 您正将newMail.HTMLBody设置为一个值,而不是将HTML插入其中。 我敢打赌,如果你检查了HTMLBody的内容,它会从其中的一些内容开始,比如css代码 但是,每当您尝试读取其中一个电子邮件值时,您的用户都会收到安全弹出窗口,显示“程序正在尝试访问..诸如此类”
我在试图维护用户的签名时遇到了这种情况,在没有触发安全提示的情况下,从来没有找到一种获取签名的好方法。这完全令人沮丧 当你用谷歌搜索这个问题时,有无数的答案告诉你用CSS简单地设置文本的样式,这是没有帮助的。是的,很好,如果你正在生成完整的电子邮件,并且可以对整个文本进行样式/控制。但在您(和我们)的情况下,目的是启动带有一些初始文本的电子邮件,最终用户添加自己的文本。这是他的补充文本,在《新罗马时代》中得到了忠实的呈现 我们找到的解决办法是从另一个方向来处理这个问题。也就是说,将Outlook中的基本/基础默认设置修复为我们选择的字体,而不是Times New Roman 这可以通过以下方式实现:
如果您需要以编程方式控制或更改字体,我很感激这没有帮助。但是,对于那些只希望基本电子邮件字体为而不是的客户来说,只要电子邮件是由代码生成的,这可能会有所帮助。这并不是我想要的。。。但可能和我现在得到的一样好!在一般性错误的情况下,《泰晤士报新罗马报》从何而来?我看到了类似的行为,但我一生都找不到所选字体的来源。此外。即使我将正文格式指定为HTML,它也会切换为纯文本。如果我不提供任何消息内容,那么它将保留HTML格式设置。如果我应用正文,它将切换为纯文本。
// 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";
}