我有一个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);
{
在发送事件处理程序中为空?
答案 0 :(得分:1)
在访问该属性之前,您需要先保存该消息。即使如此,PR_INTERNET_MESSAGE_ID
可能也无法在缓存模式下访问-由于性能原因,Outlook不会将“已发送邮件”文件夹中的项目与其联机副本同步,并且仅邮件的联机版本具有该属性。您可以使用MAPI_NO_CACHE
标志,使用扩展MAPI(C ++或Delphi)或赎回(任何语言)以在线模式打开该消息,但是在OOM中无法做到这一点。