pascalt
Goto Top

Serverseitige Outlook-Regel zur Weiterleitung des Betreffs an eine Externe E-Mail-Adresse

Hallo zusammen,

wir nutzen in der Firma Office 2013 im Zusammenspiel mit einem Exchange-Server.
Ich würde nun gerne eine Regel mit folgender Logik erstellen:

Bei jeder engehenden Mail soll nur der komplette Betreff an eine externe E-Mail (außerhalb der Domäne) gesendet werden. Hierbei ist wichtig, dass die Regel Serverseitig ist, sodass das Gerät nicht eingeschaltet sein muss.

Hat jemand eine Idee wie man das Umsetzen kann?

Content-Key: 373366

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

Printed on: April 23, 2024 at 21:04 o'clock

Member: sabines
sabines May 08, 2018 at 12:22:12 (UTC)
Goto Top
Moin,

Dein Stichwort sind Transportregeln auf dem Exchange Server, ob da jetzt nur der Betreff weitergeleitet werden kann, weiß ich grad nicht. An eine externe Email Adresse weiterzuleiten, würde ich mir an Deiner Stelle auch gut überlegen.

Wozu das?

Gruss
Member: colinardo
colinardo May 09, 2018, updated at May 05, 2021 at 10:57:09 (UTC)
Goto Top
Servus,
Entweder selbst einen "Custom Transport Agent" schreiben oder ein Powershell-Skript per EWS das unabhängig auf dem Exchange oder einem anderen Server laufen kann:
Voraussetzungen die für das Skript gegeben sein müssen können hier nachgelesen werden.
# ===== START VARS =====
# Mailbox dessen Posteingang zu überwachen ist
$global:USERNAME = 'USERNAME'  
$global:PASSWORD = 'PASSWORT'  
# E-Mail an die der Betreff jeder Mail weitergeleitet wird
$global:TARGETMAIL = 'externaluser@domain.tld'  
# Exchange-Server FQDN
$global:EXSERVER = 'SERVERXYZ.DOMAIN.TLD'  
# ===== 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"  

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_SP2)
$global:ews.Url = "https://$global:EXSERVER/ews/exchange.asmx"  
# Benutze die Credentials mit dem das Skript ausgeführt wird
$global:ews.UseDefaultCredentials = $false
$global:ews.Credentials = new-object System.Net.NetworkCredential($global:USERNAME,$global:PASSWORD)

$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){
            # lade Details der Mail
            $mail.Load()
            $m_from = $mail.From.Address
            $m_to = ($mail.ToRecipients | %{$_.Address}) -join ', '  
            write-host "Forwarding Mail with Subject '$($mail.Subject)' to '$($global:TARGETMAIL)'" -F Green  
            # create forward message
            $mail_fwd = $mail.CreateForward()
            # externen Empfänger festlegen
            $mail_fwd.ToRecipients.Add($global:TARGETMAIL)
            # Body mit Info ersetzen
            $mail_fwd.Body = "Received mail with Subject '$($mail.Subject)' from sender: '$m_from' to Recipient(s): '$m_to'"  
            # mail senden
            $mail_fwd.Send()
        }
    }
}

# 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()


write-host "Waiting for new events ..." -F Green  
while($true){
    sleep 1
}
Grüße Uwe