簡體   English   中英

如何使用 Linq Outlook C# 從商店中的所有文件夾中搜索電子郵件

[英]How to search an email from all folders in store using Linq Outlook C#

我正在通過 VSTO 加載項對所有傳入回復執行自定義操作。 加載項將傳入回復的 ConversationID 與現有電子郵件進行比較。 如果我必須在一個文件夾中搜索,它工作正常,但我的問題是電子郵件可以在商店中的任何文件夾中。 這是我的代碼。

void items_ItemAdd(object Item)
        {
            Outlook.Application application = new Outlook.Application();
            string filter = "RE: ";
            Outlook.MailItem mail = (Outlook.MailItem)Item;
            Outlook.Folder folder = mail.Parent as Outlook.Folder;
            if (Item != null)
            {
                if (mail.MessageClass == "IPM.Note" && mail.Subject.ToUpper().Contains(filter.ToUpper()))
                {
                    var RequiredMail = (from e in folder.Items.Cast<Outlook.MailItem>().OrderBy(X => X.ReceivedTime).Where(C => C.ConversationID == mail.ConversationID) select mail).FirstOrDefault();

                    // Perform custom action
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }

另外,我讀到使用 Linq 搜索電子郵件效率不高。 還有其他更有效的方法來獲取RequiredMail嗎?

任何幫助將不勝感激。

謝謝你。

首先,您必須知道,如果向集合中添加了 16 個以上的項目,則可能不會觸發ItemAdd事件。 這是 Outlook 中的一個已知問題。 以下系列文章描述了可能的解決方法:

混合使用 LINQ 和 COM 對象並不是一個好主意。 您應該立即釋放底層 COM 對象以防止出現任何已知問題。

如果您需要搜索所有文件夾中的項目,您可以使用 Application 類的AdvancedSearch方法,該方法允許根據指定的 DAV 搜索和定位 (DASL) 搜索字符串執行搜索。

在 Outlook 中使用AdvancedSearch方法的主要好處是:

  • 搜索在另一個線程中執行。 您不需要手動運行另一個線程,因為AdvancedSearch方法會在后台自動運行它。
  • 可以在任何位置搜索任何項目類型:郵件、約會、日歷、筆記等,即超出某個文件夾的范圍。 RestrictFind / FindNext方法可以應用於特定的 Items 集合(請參閱 Outlook 中 Folder 類的 Items 屬性)。
  • 完全支持 DASL 查詢(自定義屬性也可用於搜索)。 您可以在 MSDN 的過濾文章中閱讀有關此內容的更多信息。 為了提高搜索性能,如果為商店啟用了即時搜索,則可以使用即時搜索關鍵字(請參閱 Store 類的IsInstantSearchEnabled屬性)。
  • 您可以隨時使用Search類的Stop方法停止搜索過程。

在 Outlook 中以編程方式進行高級搜索:C#、VB.NET文章中閱讀有關此內容的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM