bleifuss
Goto Top

E-Mail Header via Powershell auslesen

Hallo,

ich suche ein Möglichkeit, die Header Informationen aller E-Mails eines Exchange Online Postfaches auszulesen und daraus die IP-Adressen (Received From) in eine Datei zu schreiben.

Wir haben ein Postfach, auf das alle User SPAM weiterleiten. Anhand der IP-Adresse im Header kann ich diese dann Blacklisten.
Natürlich kann ich mir die Header Infos auch manuell anzeigen lassen. Bei 50000 E-Mail wird das allerdings etwas schwierig.

Ist so etwas mit einem Office 365 Postfach möglich? Und lassen sich auch spezifische Bereiche, wie zum Beispiel die IP-Adresse herausnehmen?

Danke und beste Grüße
Tom

Content-ID: 427411

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

Ausgedruckt am: 08.11.2024 um 19:11 Uhr

138810
138810 12.03.2019 aktualisiert um 13:35:20 Uhr
Goto Top
Zitat von @Bleifuss:
Ist so etwas mit einem Office 365 Postfach möglich?
Ja. EWS ist dein Stichwort

Und lassen sich auch spezifische Bereiche, wie zum Beispiel die IP-Adresse herausnehmen?
Ja. Mit Regular Expressions ein Kinderspiel.

daraus die IP-Adressen (Received From)
Btw. das ist keine gute Idee, denn daraus müsstest du die Microsoft Anti-SPAM Tennants ausnehmen, die stehen nämlich ebenfalls in den "Received" Headern ... X-Sender-IP oder X-originating-IP wäre hier das Mittel der Wahl.

Btw. diese Arbeit nehmen dir schon diverse Dienste ab.
Bleifuss
Bleifuss 12.03.2019 um 14:09:55 Uhr
Goto Top
vielen Dank für deine Antwort.
EWS konnte ich jetzt schon mal erfolgreich Testen und mich zumindest mit dem Postfach verbinden bzw. Mails über die Powershell abrufen.

Was genau meinst Du denn für Dienste?
138810
138810 12.03.2019 aktualisiert um 14:37:08 Uhr
Goto Top
EWS konnte ich jetzt schon mal erfolgreich Testen und mich zumindest mit dem Postfach verbinden bzw. Mails über die Powershell abrufen.
Die Header stehen in der Eigenschaft InternetMessageHeaders jeder E-Mailnachricht.
Was genau meinst Du denn für Dienste?
https://www.heise.de/netze/tools/spam-listen/
Bleifuss
Bleifuss 12.03.2019 um 14:58:01 Uhr
Goto Top
Vielleicht kannst du mir ja schnell weiterhelfen.
Wenn ich unten stehenden Code verwende, bekomme ich diese Fehlermeldung zurück:

Exception calling "FindItems" with "2" argument(s): "The Url property on the ExchangeService object must be set."  
+     $findResults = $service.FindItems([Microsoft.Exchange.WebServices.Data.WellK ...

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceLocalException



$MailboxSMTP = "xxx@xxx.de"	  
$Username    = "xxx@xxx.de"				  
$Domain      = "xxx"				  
$Password    = "xxxxx"    
		
$ServiceURL  = "https://outlook.office.de/EWS/Exchange.asmx"  

$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"  

[void][Reflection.Assembly]::LoadFile($dllpath) 

$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService 	

$pagesize = 100 

$offset = 0 
$propertySet=new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.ItemSchema]::InternetMessageHeaders) 

do 
{ 
    $view = New-Object Microsoft.Exchange.WebServices.Data.ItemView($pagesize,$offset) 
    $findResults = $service.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$view) 
    foreach ($item in $findResults.Items) 
    { 
        "From: $($item.From.Name)"   
        "Subject: $($item.Subject)"   
        "References: $($item.References)"   
        "InternetMessageID: $($item.InternetMessageID)"   
        "InternetMessageHeaders"   

        $item.Load($propertySet) 

        $item.InternetMessageHeaders|foreach{"$($_.Name): $($_.Value)"}   
        ""   
    
    } 
    $offset+=$pagesize 
} while ($findResults.MoreAvailable) # Do/While loop will continue when more results are available
138810
138810 12.03.2019 aktualisiert um 15:13:31 Uhr
Goto Top
Exception calling "FindItems" with "2" argument(s): "The Url property on the ExchangeService object must be set."
Da steht's doch wort wörtlich...Du hast die URL des EWS Dienstes ($service) nicht festgelegt, du hast sie nur in eine Variable geschrieben sonst nüscht , da ist die Meldung also nicht verwunderlich...
Lesen hilft
https://docs.microsoft.com/de-de/exchange/client-developer/exchange-web- ...
Bleifuss
Bleifuss 12.03.2019 um 15:35:50 Uhr
Goto Top
Danke!
Das ganze funktioniert jetzt tatsächlich face-smile
Jetzt noch die Sache mit den Regular Expressions. Hab die noch nie verwendet aber werde das schon noch hinbekommen ;)

Danke und beste Grüße
138810
138810 12.03.2019 aktualisiert um 17:23:43 Uhr
Goto Top
Wie gesagt X-SENDER-IP oder X-ORIGINATING-IP schreibt MS in alle eingegangenen Mails dann brauchst du das auch nicht dort steht sie im Klartext schon frei Haus face-wink.
Und wenn du's trotzdem nicht lassen kannst als Lernhäppchen: '(?is)(?<=from[^\(]+\(\[?)[\d\.:a-f]+'