【问题标题】:Outlook Addin - ItemProperties.Add change the mail formatOutlook Addin - ItemProperties.Add 更改邮件格式
【发布时间】:2016-05-15 21:33:41
【问题描述】:

我正在尝试添加如下项目属性:

Microsoft.Office.Interop.Outlook.ItemProperty property = currentMail.ItemProperties.Add("isCopy", Microsoft.Office.Interop.Outlook.OlUserPropertyType.olYesNo);
property.Value = false;

问题在于它正在改变电子邮件格式。

在添加此属性之前,电子邮件发送如下:

格式化

添加此属性后,电子邮件发送如下:

未格式化并带有附件

此外,我已经尝试过 UserProperties.Add。行为是一样的。

【问题讨论】:

  • 您是否需要将用户属性附加到消息是否到达目的地?或者您只是希望它存储在消息的本地副本中?
  • 我不需要它去目的地。但是我需要访问这些数据以防用户将电子邮件保留在草稿中以备将来更新。

标签: c# email outlook mailitem


【解决方案1】:

我已经实施了一些不优雅的解决方法,只是为了不被卡住。

正如我之前所说,我需要知道 MailItem 是否是副本。所以我将 EntryID 保存在副本列表中。

对象 X:

thisAddIn.AddEntryIdCopy(mailItem.EntryID);

对象 Y:

thisAddIn.ContainsEntryIdCopy(mailItem.EntryID)

Ps.:由于MailItem移动到不同文件夹时EntryId会发生变化,所以只要MailItem在同一个文件夹中,这种方式就可以工作。

【讨论】:

    【解决方案2】:

    添加用户属性会导致 Outlook 以 TNEF (RTF) 格式(臭名昭著的 winmail.dat)发送邮件。

    您可以使用MailItem.PropertyAccessor.SetProperty(而不是使用UserProperties.Add)通过DASL 名称设置属性,或者在调用Send 之前使用MailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B", false) 将一个特殊的UseTnef 命名属性设置为false。

    【讨论】:

    • 非常感谢!我已经对其进行了测试,并且可以正常工作。我应该以这种方式设置属性:MailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{FFF40745-D92F-4C11-9E14-92701F001EB3}/myPropertyName", value);。这是关于有效的命名空间。
    • GUID 可以是您想要的任何值 - 只要您使用相同的值。 UserProperties coleldtion 使用 PS_PUBLIC_STRINGS guid。
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多