簡體   English   中英

Outlook加載項無法獲取收件箱項

[英]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對象。 您還可以擁有MeetingItemReportItem等。

無需將所有項目包裝在文件夾中。 相反,您可以處理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.

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