【问题标题】:MailItem GetItemFromID hangs indefinitelyMailItem GetItemFromID 无限期挂起
【发布时间】:2019-04-29 17:08:27
【问题描述】:

这是一个用于与正在运行的 Outlook 应用程序交互的 sn-p。

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 专业增强版,x64,版本 1808)。 Windows 10 1809。互操作是版本 15。尝试在 AnyCPUx64 下运行我的应用程序。

【问题讨论】:

    标签: vb.net outlook office-interop


    【解决方案1】:

    使用命名空间.GetItemFromID。注意第二个参数(store id)是可选的。如果当前会话中 Outlook 已触及相关存储,则可以省略它。如果不是,Outlook 将引发“未知条目 id”异常。如果指定了商店入口 id,Outlook 将首先打开它,商店提供者将有机会将其入口 id 注册到 MAPI 系统。

    您可以使用以下代码获取项目:

        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

    【讨论】:

    • 是的,我知道 CSD 并不一定意味着问题。但是,就我而言,它确实如此(注意我的标题是“无限期挂起”)。 GetItemFromID 不应该超过几秒钟(对我来说它永远不会完成)。如果这不是从本地邮箱获取项目的正确方法,那么我正在寻找正确的方法。我在网上找到的结果参差不齐,而且通常与 VBA/宏有关。
    猜你喜欢
    • 2017-06-29
    • 2011-05-07
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多