在发送之前使用ID号标记Outlook MailItem,而不会导致TNEF(RTF)发送

时间:2014-12-03 10:44:09

标签: c# outlook vsto outlook-addin

我有一个Outlook加载项,在发送之前将UserProperty分配给MailItem:

Outlook.UserProperty prop = mail.UserProperties.Add("XXXX", Outlook.OlUserPropertyType.olText);
prop.Value = "YYYY";

众所周知(例如,参见Stop Outlook from converting HTML to RTF)这样做会导致使用TNEF发送电子邮件(即RTF格式,可怕的winmail.dat)。

我的问题是,简单地取消设置TNEF属性是否安全?以下代码将执行此操作:

mail.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B", false);

这里的问题是我必须在ItemSend上执行此操作 - 我在设置属性后无法直接执行此操作,因为无论如何它总是false点。当我点击发送时,它只会变为true

我不介意取消设置TNEF属性意味着不会通过电子邮件发送该属性。我更担心的是,可能还有其他情况需要TNEF并且此代码会破坏它们。

或者,是否有一种更好的方式来标记"在发送之前带有自定义ID号的电子邮件?

2 个答案:

答案 0 :(得分:2)

阻止winmail.dat发送没有什么奇怪的。您可以继续在ItemSend事件中取消设置TNEF属性。

请注意,Outlook使用“对话”跟踪相关邮件。您可以使用Conversation *(* ID + * Index)相关属性来识别收件箱中的电子邮件。

有关详细信息,请参阅Does Outlook embed a MessageID or equivalent in its email elements?

答案 1 :(得分:2)

不要使用UserProperties集合来标记邮件 - 它会使用用户属性更新blob'定义和存储用户prop值的命名属性。 如果使用MailItem.PropertyAccessor.SetProperty设置后者而不设置前者,Outlook将不会强制使用TNEF格式。

将UseTnef属性设置为false是安全的,除非您以RTF格式发送 - 在将其重置为false之前检查该属性是否设置为true。