Outlook启动时AdvancedSearch无法捕获规则移至子文件夹邮件
Outlook VBA 启动搜索邮件异常问题
我在Outlook的ThisOutlookSession模块中编写VBA代码,预期在Outlook启动时调用AdvancedSearch方法,筛选客户端关闭期间收到的邮件并输出到立即窗口。
我已经将SearchSubFolders参数设为True,但运行时仅能捕获收件箱根目录的邮件,无法捕获被客户端规则自动路由到收件箱子文件夹内的邮件,初步判断问题和客户端规则处理、应用程序事件的执行顺序有关。
目前手动从ThisOutlookSession运行代码可以正常生效,需要实现客户端规则处理完成后再触发搜索,成功捕获被规则移动到子文件夹的邮件,相关代码如下:
Option Explicit Public blnSearchComp As Boolean ' 代码存放在ThisOutlookSession模块 Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search) Debug.Print "AdvancedSearchComplete 事件触发" If SearchObject.Tag = "Process_New_Items" Then blnSearchComp = True End If End Sub Private Sub Application_Startup() Dim dmi As MailItem Dim timeFol As Folder Dim timeFilter As String Dim lastclose As String Dim utcdate As Date Dim strFilter As String Dim i As Object Dim strScope As String Dim SearchObject As Search Set dmi = CreateItem(olMailItem) Set timeFol = Session.GetDefaultFolder(olFolderNotes) timeFilter = "[Subject] = 'App Close Time'" For Each i In timeFol.Items.Restrict(timeFilter) lastclose = i.CreationTime Next i Debug.Print lastclose utcdate = dmi.PropertyAccessor.LocalTimeToUTC(lastclose) strFilter = "urn:schemas:httpmail:datereceived >= " & "'" & utcdate & "'" Debug.Print strFilter strScope = "'" & Session.Folders(1).Folders("Inbox") & "'" Debug.Print strScope strScope = "'" & Session.GetDefaultFolder(olFolderInbox) & "'" Debug.Print strScope strScope = "'Inbox'" Debug.Print strScope Set SearchObject = AdvancedSearch(Scope:=strScope, Filter:=strFilter, SearchSubFolders:=True, Tag:="Process_New_Items") blnSearchComp = False While blnSearchComp = False DoEvents Debug.Print "等待搜索完成,必要时可按Ctrl+Break中断" Wend Debug.Print "搜索结果计数: " & SearchObject.Results.Count For Each i In SearchObject.Results If TypeName(i) = "MailItem" Then Process_MailItem i Debug.Print i.ReceivedTime, i.Subject End If Next i End Sub
问题原因
Application_Startup事件触发时机早于客户端规则执行时机:事件触发时所有关闭期间收到的新邮件还停留在收件箱根目录,等搜索执行完成后,客户端规则才会把符合条件的邮件移动到对应子文件夹,因此搜索无法捕获这部分被移动的邮件。手动执行代码时,客户端规则早已完成邮件移动操作,因此可以正常返回所有符合条件的结果。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

