This little script monitors the inbox of a mailbox for unread messages. I created it to monitor service mailboxes from which other programs automatically process mails. With a few small adjustments, it can also be used to create a monitor for PRTG or Solarwinds.
#-----------------------------
# Check mailbox for unread mails
# www.frankysweb.de
#
# by Frank Zöchling
# Version 0.1
#
#-----------------------------$mailboxName = "journal@frankysweb.de" #mailbox to be checked
$maxUnreadAge = „20“ #Wert in Minuten (1 Tag = 1440 Minuten)#EWS Verbindung herstellen
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll"
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.UseDefaultCredentials = $true
$service.AutodiscoverUrl($mailboxName)$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
#Mails abrufen und auswerten
$today = get-date
$maxagetime = $today.AddMinutes(-$maxUnreadAge)$mails = $inbox.FindItems(100)
$unreadmails = $mails | where {$_.isRead -match „False“}
$unreadmailscount = $unreadmails | measure-object | foreach-object {$_.Count}
$unreadmailsmaxagecount = $unreadmails | where {$_.DateTimeReceived -lt $maxagetime} | measure-object | foreach-object {$_.Count}write-host "Number of unread emails: $unreadmailscount"
write-host "Number of unread emails older than $maxUnreadAge minutes: $unreadmailsmaxagecount"
To run the script the EWS API 2.0 is required, the API can be downloaded here:
http://www.microsoft.com/en-us/download/details.aspx?id=35371
Hallo Frank
Dein Script interessiert mich sehr da ich auch ein Postfach mit PRTG überwachen möchte.
Leider erhalte ich immer die selbe Anzahl ungelesener Mails.
ungelesen: 99
ungelesen älter als 20 minuten: 99
Kannst Du mir sagen wo da der Fehler liegt?
Danke im Voraus
Rolf
Hallo Frank!
Exchange 2016 Umgebung EWS 2.2 ist eingerichet.
EWS habe ich getestet und funktioniert.
Bei dem Aufruf
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
bekomme ich immer die Meldung
Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „Es ist kein Postfach mit einer solchen GUID vorhanden.“
In D:\Script\Mailchecker.ps1:19 Zeichen:5
+ $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($serv …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ServiceResponseException
Wäre da nach schlau.
Derzeit schaut das Script so aus:
$mailboxName = „dispatch@contoso.eu“ #zu überprüfende Mailbox
$maxUnreadAge = „20“ #Wert in Minuten (1 Tag = 1440 Minuten)
#EWS Verbindung herstellen
#Derzeit ist EWS Api2.2 Installiert
Add-Type -Path „C:\Program Files\Microsoft\Exchange\Web Services\2.2 \Microsoft.Exchange.WebServices.dll“
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.UseDefaultCredentials = $true
$service.AutodiscoverUrl($mailboxName)
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
#Mails abrufen und auswerten
$today = get-date
$maxagetime = $today.AddMinutes(-$maxUnreadAge)
$mails = $inbox.FindItems(100)
$unreadmails = $mails | where {$_.isRead -match „False“}
$unreadmailscount = $unreadmails | measure-object | foreach-object {$_.Count}
$unreadmailsmaxagecount = $unreadmails | where {$_.DateTimeReceived -lt $maxagetime} | measure-object | foreach-object {$_.Count}
write-host Anzahl ungelesene E-Mails: $unreadmailscount
write-host Anzahl ungelesene E-Mails älter als $maxUnreadAge Minuten: $unreadmailsmaxagecountâ
Hallo Frank,
ich habe folgende Anforderung (Exchange 2013):
1. Emails in einem Unterordner alter als X Minuten vorhanden sind
2. Eine bestimmte Anzahl von Mails in einem Unterordner überschritten wurde
Die erste Anforderung würde dein Script ja erfüllen, kannst Du es bitte für die 2. Anforderung anpassen.
Danke & Gruß
Eugen
Hallo Frank,
ich bin hier auf dein Script gestossen, sieht sehr intressant aus. Nur meine Frage dazu:
Läuft das auch auf Exchange 2016?
Gruß
Heiko
Hallo Heiko,
ja das Script läuft auch mit Exchange 2016.
Gruß, Frank