以下是与正在运行的Outlook应用程序交互的代码段。
Try
OutlookObj = System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application")
Catch ex As Exception
Console.WriteLine("Something went wrong while trying to connect to Outlook. Make sure Outlook is running. Press any key to exit.")
Console.Read()
Exit Sub
End Try
OutlookInspectors = OutlookObj.Inspectors
AddHandler OutlookObj.NewMailEx, AddressOf OutlookObj_NewMail
这是我的新消息事件处理程序。
Private Sub OutlookObj_NewMail(ByVal ID As String)
Dim Item As Microsoft.Office.Interop.Outlook.MailItem = OutlookObj.Application.Session.GetItemFromID(ID)
'Further processing...
End Sub
问题是,它挂在GetItemFromID
上。最终,我将得到一个ContextSwitchDeadlock
异常。 Office是2016(365 ProPlus,x64,版本1808)。 Windows 101809。Interop是版本15。尝试在AnyCPU
和x64
下运行我的应用程序。
答案 0 :(得分:0)
使用Namespace.GetItemFromID。请注意,第二个参数(商店ID)是可选的。如果有关存储已被Outlook触摸过,则可以在当前会话中忽略它。如果不是,Outlook将引发“未知条目ID”异常。如果指定了商店条目ID,Outlook将首先打开它,并且商店提供者将有机会在MAPI系统中注册其条目ID。
您可以使用以下代码获取商品:
set App = CreateObject("Outlook.Application")
set NS = App.GetNamespace("MAPI")
NS.Logon
set Msg = NS.GetItemFromID(EntryID)
MsgBox Msg.Subject
有关更多信息,请参阅以下链接:
Open Outlook mail Item using EntryID, StoreID, and / or PR_ENTRYID