ahstax
Goto Top

Prüfen, ob OL verfügbar ist

Hallo,

mit meinem vb.net-Programm starte ich Outlook (2010) und überwache ein Postfach/einen öffentlichen Ordner auf neu eingehende E-Mails.

Outlook wird gestartet hiermit:
Process.Start("outlook.exe", "/select ""outlook:" & strFolderToMonitor & "")  

Auf neue E-Mails überwache ich den Ordner "strFolderToMonitor" mit
Public WithEvents olInboxItems As Microsoft.Office.Interop.Outlook.Items
in Zusammenwirken mit
Public Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd
...
End Sub

Das vb.net-Programm ist vorgesehen, um ununterbrochen zu laufen.

Jetzt tritt das Problem auf, dass Outlook gelegentlich zwar läuft, aber nicht drauf zugegriffen werden kann, z.B. wenn OL vergebens versucht, auf den Exchange-Server zuzugreifen. Daraus resultiert dann der Effekt, dass, auch wenn OL dann wieder verfügbar ist, das ItemAdd-Event nicht ausgelöst wird, auch wenn neue E-Mails eingehen.

Wie könnte ich diesem Problem Abhilfe schaffen? Kann man OL auf Verfügbarkeit hin überprüfen? Wenn ja, wie?

Neugierige Grüße,
Andreas

Content-Key: 270427

Url: https://administrator.de/contentid/270427

Printed on: April 25, 2024 at 17:04 o'clock

Mitglied: 114757
114757 Apr 27, 2015 updated at 14:11:15 (UTC)
Goto Top
z.B. diese Eigenschaft vor dem Erstellen der Eventhandler prüfen, und erst bei Erfolg den Eventhandler dynamisch im Code zuweisen.
https://msdn.microsoft.com/DE-DE/library/office/ff869001.aspx

Gruß jodel32
Member: ahstax
ahstax Apr 27, 2015 at 14:22:25 (UTC)
Goto Top
Hallo Jodel32,

Danke für den Tipp!!!
Verzeih mir aber bitte die Nachfrage, wie meinst Du das
z.B. diese Eigenschaft vor dem Erstellen der Eventhandler prüfen, und erst bei Erfolg den Eventhandler dynamisch im Code
zuweisen.
?

Mit einem Timer regelmäßig prüfen, ob OL offline ist? Und wenn nicht, den Event-Handler freigeben? Wenn ja, weißt Du ne Stelle, an der ich was (Beispiele) dazu finde?

Grüße,
Andreas
Mitglied: 114757
Solution 114757 Apr 27, 2015, updated at Apr 28, 2015 at 08:17:12 (UTC)
Goto Top
So aus der Lameng könnte man das etwa so machen.(ohne Gewähr)
Public Class Form1
    Dim timer As New Timer
    Dim olApp As New Microsoft.Office.Interop.Outlook.Application
    Dim items As Microsoft.Office.Interop.Outlook.Items
    Dim isOffline As Boolean

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With timer
            ' Timer Interval (ms)  
            .Interval = 2000
            ' Eventhandler dem Timer zuweisen  
            AddHandler .Tick, AddressOf timer_tick
            'Timer ist an  
            .Enabled = True
        End With
        'Items zuweisen  
        items = olApp.Session.Stores("user@domain.com").GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Items  
        'Eventhandler der Inbox  
        AddHandler items.ItemAdd, AddressOf inbox_itemadd
        'Timer starten  
        timer.Start()
    End Sub

    Private Sub timer_tick(sender As Object, e As System.EventArgs)
        'prüfe ob Session Offline wenn ja setze Variable   
        If olApp.Session.Offline Then
            isOffline = True
        Else    ' Outlook nicht mehr offline  
            If isOffline Then   'wenn Outlook vorher offline war setze erneut den Eventhandler  
                RemoveHandler items.ItemAdd, AddressOf inbox_itemadd
                AddHandler items.ItemAdd, AddressOf inbox_itemadd
                isOffline = False
            End If
        End If
    End Sub

    Private Sub inbox_itemadd(ByVal Item As Object)
        MsgBox("Neue Mail")  
    End Sub
End Class
Gruß jodel32
Member: ahstax
ahstax Apr 28, 2015 at 08:17:09 (UTC)
Goto Top
Hallo Jodel,

Vielen Dank für den Code, der, trotz "aus der Lameng", im Prinzip sofort funktionierte (Anpassungen an meinen Code hab ich vorgenommen). Dein Codeteil erkennt sofort, wenn ich OL bewusst in den Offlinemodus schalte und zurück. Ich werde beobachten, wie sich der Code nachts und am WE verhält und wieder berichten.

Bis jetzt aber schon mal ein "HERZLICHES DANKESCHÖN!"

Grüße, Andreas