Script odgl ausführen, wenn E-Mail eingeht
Hallo,
gibt es eine Möglichkeit, einem Exchange-2010-Server beizubringen, ein Script odgl bei Eingang einer E-Mail an einen bestimmten Empfänger und mit einem definierten Betreff auszuführen?
Neugierige Grüße,
Andreas
gibt es eine Möglichkeit, einem Exchange-2010-Server beizubringen, ein Script odgl bei Eingang einer E-Mail an einen bestimmten Empfänger und mit einem definierten Betreff auszuführen?
Neugierige Grüße,
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364117
Url: https://administrator.de/contentid/364117
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
3 Kommentare
Neuester Kommentar
Wenn es direkt auf dem Exchange oder einem anderem System sein soll und ohne Outlook das ständig laufen muss dann machst du das mit EWS und einer Streaming Subscription auf das NewMail Event des Posteingangs der entsprechenden Mailbox:
Vorgehensweise: Stream-Benachrichtigungen bezüglich Postfach Ereignisse mithilfe von EWS in Exchange
Alternative ein Custom Transport Agent.
Gruß Snap
Vorgehensweise: Stream-Benachrichtigungen bezüglich Postfach Ereignisse mithilfe von EWS in Exchange
Alternative ein Custom Transport Agent.
Gruß Snap
Servus Andreas,
hier ein Beispiel wie du die von @135333 genannten EWS-Dienste mit einem Powershell-Skript nutzen kannst:
Für das Skript benötigst du die Exchange Webservices DLL (Microsoft.Exchange.WebServices.dll) welche du hier herunterladen kannst, und dann in das selbe Verzeichnis wie das Skript kopierst.
Dann sicherstellen das der User der das Skript ausführt, Impersonation Rechte am Exchange hat so das dieser jegliche Mailbox auf dem Exchange ansprechen kann ohne die jeweiligen Credentials der Ziel-Mailbox zu benötigen (Lässt sich natürlich bei Bedarf auch ändern).
Was beim Eintreffen einer Mail mit einem bestimmten Betreff passieren soll kannst du im Skript selber in Zeile 64 innerhalb des If-Checks festlegen.
Variablen im Skriptkopf natürlich anpassen.
Hoffe das hilft dir.
Grüße Uwe
hier ein Beispiel wie du die von @135333 genannten EWS-Dienste mit einem Powershell-Skript nutzen kannst:
Für das Skript benötigst du die Exchange Webservices DLL (Microsoft.Exchange.WebServices.dll) welche du hier herunterladen kannst, und dann in das selbe Verzeichnis wie das Skript kopierst.
Dann sicherstellen das der User der das Skript ausführt, Impersonation Rechte am Exchange hat so das dieser jegliche Mailbox auf dem Exchange ansprechen kann ohne die jeweiligen Credentials der Ziel-Mailbox zu benötigen (Lässt sich natürlich bei Bedarf auch ändern).
Was beim Eintreffen einer Mail mit einem bestimmten Betreff passieren soll kannst du im Skript selber in Zeile 64 innerhalb des If-Checks festlegen.
Variablen im Skriptkopf natürlich anpassen.
# ===== START VARS =====
$global:MAILBOX = 'max.muster@domain.tld'
$global:EXSERVER = 'ex.domain.tld'
$global:SUBJECTREGEX = 'SPAM'
# ===== END VARS =====
$global:CONNECTIONTIMEOUT = 30
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# EWS DLL laden
Add-Type -Path "$PSScriptRoot\Microsoft.Exchange.WebServices.dll" -EA Stop
Get-EventSubscriber | Unregister-Event -Force
# Allen Zertifikaten vertrauen
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
# Trust all certs policy dem ServicePointManager zuweisen
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
# EWS Objekt erstellen
$global:ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
$global:ews.Url = "https://$global:EXSERVER/ews/exchange.asmx"
# Benutze die Credentials mit dem das Skript ausgeführt wird
$global:ews.UseDefaultCredentials = $true
$global:ews.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, [string]$global:MAILBOX)
$global:subscription = $global:ews.SubscribeToStreamingNotifications([Microsoft.Exchange.WebServices.Data.FolderId[]](New-Object Microsoft.Exchange.WebServices.Data.FolderId ([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)),[Microsoft.Exchange.WebServices.Data.EventType]::NewMail)
$global:connection = New-Object Microsoft.Exchange.WebServices.Data.StreamingSubscriptionConnection($global:ews,$global:CONNECTIONTIMEOUT)
# Event das beim Eintreffen einer/mehrerer neuer Mails ausgeführt wird
Register-ObjectEvent $global:connection -EventName OnNotificationEvent -SourceIdentifier NewMailNotification -Action {
write-host "NewMail subscription event received." -F Green
# Alle eingetroffenen Mails verarbeiten
$Event.SourceEventArgs.Events | %{
# Mail-Details mit übermittelter ItemId abrufen
$mail = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($global:ews,$_.ItemId)
# Wenn die Mail gefunden wurde ...
if ($mail){
# Wenn der Betreff ein bestimmten Inhalt hat ...
if ($mail.Subject -match $global:SUBJECTREGEX){
write-host "New mail wich matches subject: '$($mail.Subject)'." -F Green
}
}
}
}
# Event das beim Disconnect der Verbindung ausgeführt wird (Verbindung wird dann erneut hier wiederhergestellt)
Register-ObjectEvent $global:connection -EventName OnDisconnect -SourceIdentifier OnDisconnectNotification -Action {
write-host "Subscription-Connection disconnected, restarting connection ... " -F Yellow -NoNewline
while(!$global:connection.IsOpen){
$global:connection.Open()
}
write-host "Connected." -F Green
}
# Subscription erstellen
$global:connection.AddSubscription($global:subscription)
# Subscription öffnen
$global:connection.Open()
cls
write-host "Waiting for new events ..." -F Green
while($true){
sleep 1
}
Grüße Uwe