8

我有一个用 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 的混合版本。

4

3 回答 3

6

这完全令人沮丧。

当您搜索问题时,有无数答案告诉您简单地在 CSS 中设置文本样式,这无济于事。Yeeessss,很好,如果您正在生成完整的电子邮件并且可以设置/控制整个文本的样式。但是在您(和我们)的情况下,目的是启动带有一些初始文本的电子邮件,最终用户添加他自己的文本。这是他的附加文本,在 Times New Roman 中不断呈现。

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

这可以通过以下方式完成:

  1. 打开 Word(是的,不是 Outlook)
  2. 转到选项 -> 高级 -> Web 选项
  3. 在“字体”选项卡中更改默认字体

视频在这里:
http ://www.youtube.com/watch?v=IC2RvfoMFz8

如果您需要以编程方式控制或更改字体,我很感激这无济于事。但是对于那些只希望在从代码生成电子邮件时基本电子邮件字体不是Times New Roman 的客户来说,这可能会有所帮助。

于 2014-01-30T15:57:31.583 回答
2

由于它是 HTML 电子邮件,因此您可以轻松地将所需的任何样式嵌入到实际的 HTML 正文中。当您从 Outlook GUI 创建消息时,我怀疑这就是 Outlook 正在做的事情。

我实际上不知道如何获取用户设置。我查看了 Outlook API(这是一个奇怪的野兽),但没有看到任何可以访问默认消息属性的东西。

于 2009-07-01T01:55:02.487 回答
0

根据我的经验,创建电子邮件确实使用默认电子邮件设置。

您正在将 newMail.HTMLBody 设置为一个值,而不是在其中插入您的 HTML。我敢打赌,如果您检查 HTMLBody 的内容,它会以其中的某些内容开头,例如 css 代码

但是,每当您尝试从其中一个电子邮件值中读取时,您的用户都会收到安全弹出窗口,上面写着“程序正在尝试访问..blah blah blah”

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

于 2011-06-29T13:45:29.710 回答