【问题标题】:Outlook Application_NewMailEx not working on startupOutlook Application_NewMailEx 在启动时不工作
【发布时间】:2017-05-07 22:59:32
【问题描述】:

我正在使用Application_NewMailEx 处理收到的所有电子邮件。 它适用于 Outlook 打开时收到的电子邮件。

但是在启动时,Application_NewMailEx 不会被收到的电子邮件调用。

我尝试使用Application_Startup,但在收到电子邮件之前调用它 ==> 不起作用。 没有application.ontime来延迟启动宏... Application_NewMail 也一样。

怎么做?

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    INIT_FOLD
    TreatMsg Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection)
End Sub

【问题讨论】:

  • 你能发布一些你的插件代码吗?
  • 嗨,没有插件,只有模块中的代码和这个outlooksession。我会添加它
  • 因为在 Outlook 启动时加载了插件,因此新邮件事件不太可能在启动时被触发。如果您维护所有邮件的信息,您可以延迟新邮件的处理。
  • 重点是据我所知没有 application.ontime 或 application.wait ......所以 Application_Startup 太早了,而且 Application_NewMailEx 似乎还没有被触发。我确实会使用外部代码来进行延迟,但这很难看。
  • 这就是您在 ThisOutlookSession 上的所有代码吗?

标签: vba outlook outlook-addin outlook-2007


【解决方案1】:

NewMailEx 事件只会针对您的代码运行时收到的消息触发。在此之前在您的(Exchange?)邮箱中收到的电子邮件不会触发它。

您可以在启动时处理收件箱中的未读电子邮件(Items.RestrictItems.Find/FindNext),假设新的未处理邮件仍然未读,或者(在缓存模式的情况下)在收件箱文件夹中使用 Items.ItemAdd 事件 -当您的 OST 文件与远程邮箱同步时,它将触发。

【讨论】:

  • 我不明白你的意思。当 Outlook 打开时,没有代码运行,NewMailEx 在收到的每条消息上都会被调用。我会检查 Items.ItemAdd,谢谢。现在我通过一个丑陋的代码绕过了这个问题:Outlook 在启动时会启动一个 VBS,它会等待几秒钟,然后再调用一个处理最新消息的 Outlook VBA 代码,直到它看到一个已读消息。丑陋但绕过outlook中缺少application.ontime。
  • 我查了一下,确实 Items.ItemAdd 是有效的。我更喜欢 Outlook 打开时的 NewMailEx(每封邮件一个事件,即使它们是同时发生的,与 items.add 不同,每个邮件块一个事件),所以我用 Items.ItemAdd 替换了我丑陋的代码,但在第一个 NewMailEx 我卸载它。到目前为止一切顺利,谢谢!
【解决方案2】:

当您有超过 8 个项目进入时,Items.ItemAdd 和 NewMailEx 不起作用。Microsoft 不保证它会自行触发此事件。

【讨论】:

    【解决方案3】:

    这是一个示例,说明如何设置应用程序启动并在将 MailItem 添加到收件箱时触发您的 vba

    Private WithEvents Items As Outlook.Items
    Private Sub Application_Startup()
        Dim olNs As Outlook.NameSpace
        Dim Inbox  As Outlook.MAPIFolder
    
        Set olNs = Application.GetNamespace("MAPI")
        Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
        Set Items = Inbox.Items
    End Sub
    
    Private Sub Items_ItemAdd(ByVal Item As Object)
        If TypeOf Item Is Outlook.MailItem Then
            Example Item ' call sub
        End If
    End Sub
    
    Public Sub Example(ByVal Item As Object)
        Debug.Print Item.Subject ' Immediate Window
    End Sub
    

    Application.Startup Event (Outlook)Items.ItemAdd Event (Outlook)

    Items.ItemAdd Event (Outlook) 在将一项或多项添加到指定集合时发生。一次将大量项目添加到文件夹时不会运行此事件。此事件在 Microsoft Visual Basic 脚本版 (VBScript) 中不可用。


    Application.Startup Event (Outlook) 在 Microsoft Outlook 启动时发生,但在所有加载项程序都已加载之后。


    【讨论】:

    • 谢谢,看来我没有正确使用邮件项。它现在似乎工作正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2022-12-26
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多