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

问题描述 投票:0回答:2

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

c# outlook vsto bouncedemail messageid
2个回答
0
投票

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

使用Find类的FindNext / RestrictItems方法。 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

0
投票

正如Eugene所说,您需要根据PR_INTERNET_MESSAGE_ID属性搜索已发送的消息。没有理由使用Items.Restrict或什至Find/FindNext-因为您期望一次匹配(除非您的邮箱确实确实有问题),所以只需要一次呼叫Items.Find

还请记住,在缓存的Exchange模式下,将不会在“已发送邮件”文件夹中的项目上设置PR_INTERNET_MESSAGE_ID。要解决此问题,您需要在联机模式下打开“已发送邮件”文件夹(可以使用C ++ / Delphi中的Extended MAPI或任何语言的Redemption来执行此操作。)>

© www.soinside.com 2019 - 2024. All rights reserved.