发送电子邮件后,事件处理程序中不提供消息ID(PR_INTERNET_MESSAGE_ID_W_TAG)

时间:2019-01-30 01:33:42

标签: c# vsto outlook-addin

我有一个keytool -list -v -keystore /Users/example/Desktop/example.jks -alias example 的实例,并将Microsoft.Office.Interop.Outlook.Application添加到itemSendHandler

Application.itemSend

我假设在Application.itemSend += itemSendHandler 内部,该电子邮件应该已经发送,并且该电子邮件应该存在消息ID。但是以下代码会产生一个空itemSendHandler

messageId

但是,当我此后立即通过代码或工具(如OutlookSpy或MFCMAPI)检查发送的项目时,该属性存在。为什么private void itemSendEventHandler(object sentItem, ref bool Cancel) } string PR_INTERNET_MESSAGE_ID_W_TAG = "http://schemas.microsoft.com/mapi/proptag/0x1035001F"; PropertyAccessor propertyAccessor = ((MailItem)sentItem).PropertyAccessor; // This is null? Why? string messageId = (string)propertyAccessor.GetProperty(PR_INTERNET_MESSAGE_ID_W_TAG); ThisAddIn.attemptToReleaseComObject(propertyAccessor); { 在发送事件处理程序中为空?

1 个答案:

答案 0 :(得分:1)

在访问该属性之前,您需要先保存该消息。即使如此,PR_INTERNET_MESSAGE_ID可能也无法在缓存模式下访问-由于性能原因,Outlook不会将“已发送邮件”文件夹中的项目与其联机副本同步,并且仅邮件的联机版本具有该属性。您可以使用MAPI_NO_CACHE标志,使用扩展MAPI(C ++或Delphi)或赎回(任何语言)以在线模式打开该消息,但是在OOM中无法做到这一点。