2016-06-21 14 views
0

Mein Outlook besteht aus 3 Benutzerpostfächern (zwischengespeichert) und 10 freigegebenen Postfächern (online).Wie höre ich "ItemAdd" für alle meine Ordner "Gesendete Objekte"?

Ich muss fangen, wenn eine Mail in einem dieser Postfächer gesendet wird, also googelte ich, dass ich "ItemAdd" -Ereignis hören sollte.

Problem ist, dass ItemAdd Ereignis nicht ausgelöst wird.

Hier ist mein Testcode:

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 

Jede Idee, warum es nicht gebrannt wird?

Dank

Antwort

0

Das ist ein weit verbreiteter Irrtum für Anfänger ...

Sie müssen das Quellobjekt im globalen Bereich erklären (zum Beispiel in der Add-In-Klasse) und halten sie am Leben zu Holen Sie sich die Veranstaltung. Oder der Garbage Collector wischt den Heap und das Quellobjekt wird zerstört.

In Ihrem Fall definieren Sie eine Liste von Outlook-Ordnern, wo Sie alle Referenzen behalten können.