[英]How to retrieve emails directly from Outlook 2010 inbox for multiple users, for a VSTO Outlook add-in
[英]Outlook Add-in Unable to get inbox items
正在開發審核收件箱中的郵件的方法。 在這種情況下,我嘗試使用自定義類將所有郵件項目包裝在收件箱中。 我正在使用以下代碼來做到這一點。
OutlookNS._NameSpace outNS;
List<MailWrapper> wrappedItems = new List<MailWrapper>();
OutlookNS.Explorer explorer;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
outNS = this.Application.GetNamespace("MAPI");
OutlookNS.MAPIFolder folder = outNS.GetDefaultFolder(OutlookNS.OlDefaultFolders.olFolderInbox) as OutlookNS.MAPIFolder;
foreach (OutlookNS.MailItem item in folder.Items)//No items here
{
try
{
OutlookNS.MailItem mailItem = item as OutlookNS.MailItem;
MailWrapper wrappedItem = new MailWrapper(mailItem); ;
wrappedItems.Add(wrappedItem);
}
catch (Exception ex)
{
// do nothing for now
}
}
}
但這沒有獲取任何項目。 有人可以幫忙嗎?我猜可能是因為郵件仍未加載。
首先,永遠不要遍歷文件夾中的所有項目-您將用完RPC通道。
最重要的是,您假設收件箱中的所有項目都是MailItem
對象。 您還可以擁有MeetingItem
, ReportItem
等。
無需將所有項目包裝在文件夾中。 相反,您可以處理Explorer類的SelectionChange事件,當用戶以編程方式或通過與用戶界面進行交互來選擇其他或其他Microsoft Outlook項目時,將觸發該事件。 當用戶(通過編程方式或通過用戶界面)單擊或切換到包含項目的其他文件夾時,也會發生此事件,因為Outlook會自動選擇該文件夾中的第一個項目。
因此,基本上,您可以在Outlook中選中(進入視圖)項目時將其包裝。 您可能還會發現“ 為Outlook 2010開發檢查器包裝”一文有用。
作為一種解決方法,您可以保留一個EntryID
列表,該列表可通過使用Namespace類的GetItemFromID
方法來檢索原始項目。
我也注意到下面的代碼行:
foreach (OutlookNS.MailItem item in folder.Items)//No items here
Items
集合可能包含不同類型的Outlook項目。 您需要檢查MessageClass屬性或僅檢查項目類型(VBA):
For Each Item In olFolder.Items
If TypeOf Item Is Outlook.MailItem Then
Dim oMail As Outlook.MailItem: Set oMail = Item
Debug.Print oMail.SenderEmailAddress
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.