VSTO - 展望如何从邮件 ID 跟踪电子邮件



我正在为 Outlook 开发一个 VSTO 加载项, 现在我收到一封退回电子邮件,其中包括邮件 ID。 如何在 VSTO 程序中跟踪此邮件 ID 中的原始电子邮件?

您可以搜索PR_INTERNET_MESSAGE_ID属性值。该属性的DASL名称为http://schemas.microsoft.com/mapi/proptag/0x1035001F

使用Items类的Find/FindNextRestrict方法。Restrict方法是使用Find方法或FindNext方法循环访问集合中的特定项的替代方法。如果项目数量较少,则FindFindNext方法比筛选更快。如果集合中有大量项目,则Restrict方法明显更快,尤其是在预计只找到大型集合中的少数项目时。

但是,如果您需要从多个文件夹中查找项目,我建议您改用AdvancedSearch方法:

Public m_SearchComplete As Boolean  

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
If SearchObject.Tag = "MySearch" Then  
m_SearchComplete = True  
End If  
End Sub  

Sub TestSearchForMultipleFolders()  
Dim Scope As String  
Dim Filter As String  
Dim MySearch As Outlook.Search  
Dim MyTable As Outlook.Table  
Dim nextRow As Outlook.Row  
m_SearchComplete = False  
'Establish scope for multiple folders  
Scope = "'" & Application.Session.GetDefaultFolder( _  
olFolderInbox).FolderPath _  
& "','" & Application.Session.GetDefaultFolder( _  
olFolderSentMail).FolderPath & "'"  
'Establish filter  
If Application.Session.DefaultStore.IsInstantSearchEnabled Then  
Filter = Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x1035001F" _  
& Chr(34) & " ci_phrasematch 'MesssageID'"  
Else  
Filter = Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x1035001F" _  
& Chr(34) & " like '%MessageID%'"  
End If  
Set MySearch = Application.AdvancedSearch( _  
Scope, Filter, True, "MySearch")  
While m_SearchComplete <> True  
DoEvents  
Wend  
Set MyTable = MySearch.GetTable  
Do Until MyTable.EndOfTable  
Set nextRow = MyTable.GetNextRow()  
Debug.Print nextRow("Subject")  
Loop  
End Sub

正如 Eugene 所提到的,您需要根据PR_INTERNET_MESSAGE_ID属性搜索已发送的消息。没有理由使用Items.Restrict甚至Find/FindNext- 因为您期望一个匹配(除非您的邮箱确实有问题(,只需一次调用Items.Find即可。

另请记住,在缓存的 Exchange 模式下,不会对"已发送邮件"文件夹中的项目设置PR_INTERNET_MESSAGE_ID。若要解决此问题,需要在联机模式下打开"已发送邮件"文件夹(您可以使用任何语言的C++/Delphi 或 Redemption(我是其作者(中的扩展 MAPI 执行此操作。

相关内容

  • 没有找到相关文章

最新更新