[英]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
方法會在后台自動運行它。Restrict
和Find
/ FindNext
方法可以應用於特定的 Items 集合(請參閱 Outlook 中 Folder 類的 Items 屬性)。IsInstantSearchEnabled
屬性)。Search
類的Stop
方法停止搜索過程。在 Outlook 中以編程方式進行高級搜索:C#、VB.NET文章中閱讀有關此內容的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.