2017-02-21 20 views
0

受信トレイに入ってくるメールを監査するために開発中です。これは、カスタムクラスで受信トレイのすべてのメールアイテムをラップしようとしています。それを行うには、次のコードを使用しています。Outlookアドイン受信トレイのアイテムを取得できません

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 
       } 
      } 
     } 

しかし、これはアイテムを取得していません。誰か助けてもらえますか?それはメールがまだ読み込まれていないためです。

答えて

0

まず、フォルダ内のすべてのアイテムをループしないでください。RPCチャネルが不足します。

受信トレイのすべてのアイテムがMailItem個のオブジェクトであることが最も重要です。 MeetingItemReportItemなどもあります。

0

フォルダ内のすべてのアイテムをラップする必要はありません。代わりに、ユーザーがプログラムで別のまたは追加のMicrosoft Outlookアイテムを選択したとき、またはユーザーインターフェイスと対話するときに発生するExplorerクラスのSelectionChangeイベントを処理できます。このイベントは、Outlookが自動的にそのフォルダ内の最初の項目を選択するため、ユーザーが(プログラムでまたはユーザーインターフェイス経由で)クリックするか、アイテムを含む別のフォルダに切り替えるときにも発生します。

Outlookでは、基本的にアイテムが表示されている(表示されている)ときにラップできます。また、Developing an Inspector Wrapper for Outlook 2010の記事が役立つかもしれません。

回避方法として、のリストを保持して、NamespaceクラスのGetItemFromIDメソッドを使用して元のアイテムを取得することができます。

また、私は次のコード行を気づいた:

foreach (OutlookNS.MailItem item in folder.Items)//No items here 

Items収集5月には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 
関連する問題