2016-06-21 5 views
0

My Outlookは、3つのユーザーメールボックス(キャッシュ)と10の共有メールボックス(オンライン)で構成されています。すべての「送信済みアイテム」フォルダの「ItemAdd」を聞くにはどうすればよいですか?

これらのメールボックスのいずれかのメールが送信されたときに私は捕捉する必要があるので、私は "ItemAdd"イベントを聴くべきであることを尋ねました。

問題は、そのItemAddイベントが発生しないということです。

Imports System.Runtime.InteropServices 

Public Class ThisAddIn 

    Private sentFolders As New List(Of Outlook.Folder) 


    Private Sub ThisAddIn_Startup() Handles Me.Startup 
     Call InitSentFolders() 
    End Sub 


    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown 
    End Sub 


    Private Sub InitSentFolders() 
     Dim ns As Outlook.NameSpace = Application.GetNamespace("MAPI") 
     Dim stores As Outlook.Stores = ns.Stores 
     For i As Integer = 1 To stores.Count 
      Try 
       Dim store As Outlook.Store = stores(i) 
       Try 
        Dim sentFolder As Outlook.Folder = TryCast(store.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail), Outlook.Folder) 
        AddHandler DirectCast(sentFolder.Items, Outlook.Items).ItemAdd, AddressOf ItemAdd 
        sentFolders.Add(sentFolder) 
       Catch ex As Exception 
       End Try 
       Marshal.ReleaseComObject(store) 
      Catch ex As Exception 
      End Try 
     Next 
     Marshal.ReleaseComObject(stores) 
     Marshal.ReleaseComObject(ns) 
    End Sub 


    Private Sub ItemAdd(ByVal ItemObject As Object) 
     If TypeOf (ItemObject) Is Outlook.MailItem Then 
      Dim item As Outlook.MailItem = CType(ItemObject, Outlook.MailItem) 
      MsgBox(item.Sender.ToString) 
      Marshal.ReleaseComObject(item) 
     End If 
    End Sub 

End Class 

それが発射されていない理由を任意のアイデア:

ここに私のテストコードがですか?あなたが(例えば、アドインクラスで)グローバルスコープでソースオブジェクトを宣言しに生き、それを維持する必要がある初心者のため広く普及間違いです

おかげ

答えて

0

...

イベントを取得します。または、ガベージコレクタがヒープをスワイプし、ソースオブジェクトが破棄されます。

あなたの場合、すべての参照を保持できるOutlookフォルダのリストを定義します。

関連する問題