Outlook Interop,邮件格式

时间:2009-07-01 01:17:15

标签: c# email interop outlook stylesheet

我有一个用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.

3 个答案:

答案 0 :(得分:6)

这令人非常沮丧。

当您解决Google问题时,无数答案会告诉您只需样式 CSS中的文本即可。 Yeeessss,很好,如果您正在生成完整的电子邮件并可以设置/控制整个文本。但在你的情况下(和我们的),目的是用一些初始文本启动电子邮件,最终用户添加他自己的文本。这是他在Times New Roman中不断提出的附加文本。

我们找到的解决方案是从另一个方向解决问题。这就是将Outlook中的基本/底层默认值修复为我们选择的字体而不是Times New Roman。

可以通过以下方式完成:

  1. 打开Word(是的,不是Outlook)
  2. 转到选项 - &gt;高级 - &gt;网页选项
  3. 更改“字体”标签中的默认字体
  4. 视频在这里:
    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代码

但是,无论何时,当您尝试从其中一个电子邮件值进行阅读时,您的用户都会收到安全弹出窗口,上面写着“程序正在尝试访问...请等等。”

我试图维护用户的签名时碰到了这个,在没有触发安全提示的情况下找不到一个很好的方法来获取它。