Message Tracking in Exchange Online

Diese Seite bezieht sich noch auf das alte Exchange Admin Center und die alte Exchange Online PowerShell, die beide im Jahr 2022/2023 immer weiter zurückgebaut wurden. Auf der Seite Exo Message Tracking V3 habe ich aktueller Daten für Browser, PowerShell und APIs beschrieben.

Auch in Exchange Online können Sie nachverfolgen, ob Mails zugestellt wurden oder welche Probleme es bei der Nachrichtenübertragung gegeben hat.

Hinweis: Microsoft verlagert das Message Tracking raus aus dem Exchange Control Panel in das "Security and Compliance Center " unter https://protection.office.com/messagetrace

Varianten des Tracking

Ähnlich wie On-Prem gibt es auch mit Exchange Online mehrere Wege, Informationen über die Übertragung von Nachrichten zu ermitteln:

  • Admin Tracking per ECP
    Der Administrator kann für alle Benutzer die Nachverfolgung durchführen. Allerdings nur für bis zu 7 Tage
  • Admin Tracking per ECP für Mails älter 7 Tage
    Länger zurückliegende Mails kann der Administrator über die gleiche Schnittstelle zwar Anfragen, aber die Antwort wird asynchron bearbeitet und später als CSV-Datei bereit gestellt
  • Admin PowerShell
    Natürlich kann all das auch per PowerShell erfolgen

Leider ist es mit Bordmitteln nicht möglich, dass ein Anwender selbst nachschaut, ob seine Mal schon versendet wurde. Wenn Anwender darauf wert legen, sollten Sie Die Mail als Einschreiben oder mit Empfangsbestätigung senden. Sie bekommen aber sowieso eine Meldung, wenn die Mail verzögert wurde oder nicht zugestellt werden konnte. Insofern ist dieser Fall eher selten

Erforderliche Berechtigungen

Ehe sie nun an das "Tracken" gehen können, müssen Sie sich die entsprechenden Berechtigungen gewähren oder gewähren lassen. Die Analyse und Fehlersuche anhand Aufgezeichneter Nachrichtenprotokolle ist durchaus ein sensibles Thema. Es geht nicht nur um anonyme tote Daten. Das Messagetracking enthält Absender und Empfänger, Zeiten aber vor allem auch den Betreff der Nachrichten. Alleine aus diesen Metadaten können Rückschlüssel und Informationen erhalten werden, die den Datenschutz betreffen.

Eine Arbeitszeitkontrolle im klassischen Sinn ist zwar nicht möglich aber wer es drauf anlegt, kann über die Zeiten, wenn jemand eine Mail sendet, durchaus ein Arbeitszeitprofil erstellen. Klären Sie diese Fragen ehe Sie die Rechte nutzen. Eine der folgende Management Rollen erlaubt ihnen das Messagetracking zu nutzen

Einen Überblick über die Rollen und deren Berechtigungen finden Sie auch auf

Tracking aus anderen Tenants

Manchmal finden sie in ihrem Tenant auch Nachrichten an andere Firmen. Ich erkläre mir das derart, das es eine große globale Datenbank zum Messagetracking gibt, und sie alle Einträge finden, die zu ihren Anwendern passen. dabei kann es folgendes Szenario geben:

  • Absender: Tenant1: Exchange Hybrid
    Der Absender ist dabei ein Postfach auf ihrem lokalen On-Premises Exchange Server und der lokale Exchange Server versendet auch die Mail ohne Umweg über die Cloud
  • Empfänger: Tenant2: Exchange Online
    Das Ziel hat ein Postfach in Exchange Online

In dem Fall sollten Sie eine Mail von ihrem lokalen Exchange Server über den MX-Reord zum Empfänger übermittelt werden. Die Mail landete entweder direkt bei Exchange Online des anderen Tenant oder bei einer Hybrid-Bereitstellung mit lokalem MX-Server erst mit einem Umweg.

In beiden Fällen habe ich aber gesehen, dass der Administrator von Tenant 1 beim Messagetracking in seinem eigenen Tenant auch die Events gesehen hat, wie seine Mail im Postfach beim Tenant 2 landen. Das kann verwirren und ich hätte das auch nicht erwartet. Aber vielleicht ist es ja Absicht. So können Sie als Absender sogar erkennen, ob die Mail im Ziel angekommen ist.

Tracking durch den Admin

In Office 365 kann ein Exchange Administrator natürlich nachverfolgen, welche Mail wie übertragen wurde, zumindest solange sich die Mail im Office 365 Eco-System bewegt hat. Dazu muss er das Exchange Admin Center auf https://outlook.office365.com/ecp aufrufen und sich ggfls. anmelden. Im Bereich "Mail Flow" finden Sie den "Message Trace".

Hinweis: Microsoft verlagert das Message Tracking raus aus dem Exchange Control Panel in das "Security and Compliance Center " unter https://protection.office.com/messagetrace

Wenn Sie hier direkt auf "Search" klicken, werden alle Nachrichten der letzten 48 Stunden angezeigt. Wenn Sie den Absender oder Empfänger wissen, dann lässt sich das Ergebnis natürlich einschränken.

Beachten Sie die Datenschutzgesetze in ihrem Land. Über diese Funktion können Administratoren durchaus "Beziehungen" auswerten und über den Betreff schon auf den Inhalt einer Mail schließen.

Im Ergebnisfenster sehen Sie dann pro Mail eine Zeile. Mein Test-Tenant hat hier natürlich nicht so viele Mail.

Durch einen Doppelklick öffnet sich das Detail-Fenster, welches hier eine erfolgreich versende Mail beschreit und gleich Tipps für die Fehlersuche beim Empfänger mit gibt.

Aus Sicht von Office 365 hat diese Mail aber das System erfolgreich verlassen und in den Events am Ende sehen Sie auch, von welchem Exchange Server die Mail angenommen und an welches Zielsystem diese übertragen wurde. Beachten Sie bitte, dass diese Abfolge nicht zwingend in der korrekten Reihenfolge angezeigt wird. So zeigt das Messagetracking sehr wohl an, dass Exchange Online auch die ausgehende Mail vorher noch auf "Spam" geprüft hat, auch wenn der Eintrag am Ende steht

Admin Tracking per ECP für Mails älter 7 Tage

Wenn die Mail aber schon länger als 7 Tage zurück liegt, dann kann Office 365 die Daten nicht mehr sofort liefern. Anscheinend überträgt Microsoft die relevanten Informationen aus den Trackinglogs nach 7 Tagen in eine gesonderte Datenbank, auf die Sie nur asynchron zugreifen können. Sie stellen die Anfrage wie gewohnt im Browser aber bekommen nicht sofort eine Antwort. Der Suchdialog erweitert sich (grün markiert), wenn Sie mehr als 7 Tage in die Vergangenheit zurück gehen.

Sie können maximal 90 Tage in die Vergangenheit zurück, auch wenn das Dialogfeld andere Zeiträume erlaubt. zudem müssen Sie mindestens einen Empfänger oder Sender auswählen.

Hinweis: Ich habe hier die Checkbox bei "Include message events and routing details with report" aktiviert. Das hat Auswirkungen auf die später gelieferte CSV-Datei, wie ich weiter unten beschreibe.

Wenn alle Daten vollständig waren, dann wird ein Job eingestellt und diese auch angezeigt:

Rot markiert ist der Link, mit dem Sie die eingestellten Suchaufträge einsehen können.

Es kann schon einige Minuten dauern, bis der Prozess vom einem "Not Started" zu einem "In Progress" und letztlich in einen "Done" geht. Sie müssen aber nicht darauf warten, das Sie eine Benachrichtigung per Mail bekommen.

In diesem Beispiel wurden nun 50 Mails in dem Report aufgelistet, den ich herunterladen kann, Es ist direkt eine CSV-Datei, die ich lokal mit Excel öffnen kann. Allerdings kommt gerade ein deutsches Excel mit "," (Komma) als Trennzeichen nicht zurecht, wenn es eigentlich ein ";" (Semikolon) erwartet.

Die PowerShell macht das schon einfacher

$trace= Import-Csv `
   -path "C:\temp\MTDetail_Message trace report Donnerstag, 15. Juni 2017.csv" `
   -Encoding unicode

Ein Element sieht z.B. wie folgt aus:

$trace[0]

date_time                 : 2017-05-12T21:54:11.8190000Z
client_ip                 :
client_hostname           : VI1PR0101MB2255
server_ip                 :
server_hostname           :
source_context            : CatDSN
connector_id              :
source                    : AGENT
event_id                  : AGENTINFO
internal_message_id       : 1455993916436
message_id                : <1E260F86-A1D5-41C9-9022-E1CDCDA0CC9C@msxfaq.net>
network_message_id        : 41705ebf-a22f-4bae-bff2-08d499816b5b
recipient_address         : User1@msxfaq.net
recipient_status          :
total_bytes               : 12015
recipient_count           : 1
related_recipient_address :
reference                 :
message_subject           : Certroaming und password
sender_address            : User1@msxfaq.net
return_path               : User1@msxfaq.net
message_info              :
directionality            : Incoming
tenant_id                 : eef62a09-7718-4063-82db-d7582dc8916f
original_client_ip        : 212.227.126.133
original_server_ip        : 25.152.18.74
custom_data               : S:PCFA=OCAT|dkim=0;S:HAA=SUM|ExternalDelay=453|EopD
                            elay=1;S:HAA=ExternalDetail|[10.208.219.4]->mrelaye
                            u.kundenserver.de=449|[212.227.15.40]->mx.emig.kund
                            enserver.de=2|mout.kundenserver.de#>VE1EUR03FT025.m
                            ail.protection.outlook.com=1;S:DeliveryPriority=Nor
                            mal;S:AccountForest=EURPR01A002.prod.outlook.com

Wenn ich die MessageID kenne und nach date_time sortiere, dann kann ich den Lauf einer Mail durch die Instanzen gut sehen

$trace `
| ? {$_.message_id -eq "<AAF74BCF-97A0-487E-8FA1-2E86B226EF5E@msxfaq.net>"} `
| sort date_time `
| ft date_time,source,event_id -AutoSize

date_time                    source      event_id
---------                    ------      --------
2017-06-11T18:53:51.4500000Z SMTP        RECEIVE
2017-06-11T18:53:51.9440000Z ROUTING     RESOLVE
2017-06-11T18:53:52.9820000Z AGENT       AGENTINFO
2017-06-11T18:53:52.9840000Z AGENT       AGENTINFO
2017-06-11T18:53:53.2810000Z AGENT       AGENTINFO
2017-06-11T18:53:53.5450000Z AGENT       AGENTINFO
2017-06-11T18:53:53.5470000Z STOREDRIVER DELIVER

Diese Mail wurde zuverlässig zugestellt. Wenn ich nach der "message_id" gruppiere ist auch gut zu sehen, dass es unterschiedliche Einträge pro Mail gibt

$trace| group message_id

Count Name                      Group
----- ----                      -----
    7 <1E260F86-A1D5-41C9-90... {@{date_time=2017-05-12T21:54:11.8190000Z; c...
    7 <012f01d2d56d$7b2835b0... {@{date_time=2017-05-25T15:42:21.3780000Z; c...
    2 <AAF74BCF-97A0-487E-8F... {@{date_time=2017-06-11T18:53:53.5470000Z; c...
    1 <ZHJzOzI2OTQ7MjEzMTc1N... {@{date_time=2017-05-01T08:15:37.9480000Z; c...
    7 <19173AF8-E83A-46EB-92... {@{date_time=2017-06-03T07:45:12.3190000Z; c...
    1 <5cb70bc98bffbafcf2877... {@{date_time=2017-04-28T19:57:59.0460000Z; c...
    7 <031b01d2d634$7aad58f0... {@{date_time=2017-05-26T15:26:44.7530000Z; c...
    7 <5D33C45A-6982-4DE7-94... {@{date_time=2017-05-30T19:37:34.9450000Z; c...
    7 <4694423D-9792-414B-AC... {@{date_time=2017-06-11T21:54:30.7650000Z; c...
    7 <6832E857-9DC0-45A0-AF... {@{date_time=2017-06-06T13:50:27.5190000Z; c...
    7 <0b9901d2adef$60efc140... {@{date_time=2017-04-05T09:31:23.0000000Z; c...
    7 <FE667D9B-0FF8-4CE2-B7... {@{date_time=2017-06-10T19:34:56.2490000Z; c...
    7 <E90C515E-679B-4950-A4... {@{date_time=2017-05-22T20:16:01.7690000Z; c...
    7 <F1736F21-7EE5-4DCA-88... {@{date_time=2017-04-20T22:30:57.7300000Z; c...

Anscheinend gibt es aber zumindest in meinem Tenant eine Häufung von 1,2, und 7.

Vereinfachte CSV-Datei

Dieser Detailreichtum ist nur vorhanden, wen ich bei der Anforderung auch die Details angefordert habe:

Ohne diese Option bekomme ich eine deutlich abgespeckte Datei, in der pro Empfänger einer Mail genau eine Zeile enthalten ist, die dann mit weniger Spalten nur eine Zusammenfassung liefert. Auch hier die CSV-Datei mit "Komma" getrennt und als UNICODE-Datei vorhanden. Ich nutze auch hier lieber die PowerShell zum einlesen und auswerten

$summary=Import-Csv `
   -path ".\MTSummary_Message trace report Donnerstag, 15. Juni 2017 .csv" `
    -Encoding unicode


$summary[0]

origin_timestamp   : 2017-05-23T19:49:06.1682046Z
sender_address     : User1@msxfaq.net
recipient_status   : User1@msxfaq.net##Deliver,
                     Resolve;User1@msxfaq.onmicrosoft.com##Receive;
message_subject    :
total_bytes        : 306665
message_id         : <148EDE6A-2046-4023-84BE-C8CD19D8D8E2@msxfaq.net>
network_message_id : 33bcbf90-a69c-4dee-8f7e-08d4a214c571
original_client_ip : 212.227.126.131
directionality     : Incoming
connector_id       :
delivery_priority  : Normal

Im Gegensatz zu den Details ist hier immer nur eine Mail pro MessageID

$summary | group message_id

Count Name                      Group
----- ----                      -----
    1 <148EDE6A-2046-4023-84... {@{origin_timestamp=2017-05-23T19:49:06.1682...
    1 <68024c63-ef09-7c74-c0... {@{origin_timestamp=2017-06-01T16:32:59.3395...
    1 <01ed01d2d5a8$064eb850... {@{origin_timestamp=2017-05-25T22:41:31.9362...
    1 <48eccc98-53a7-4359-92... {@{origin_timestamp=2017-05-13T17:43:06.9740...
    1 <19173AF8-E83A-46EB-92... {@{origin_timestamp=2017-06-03T07:45:08.8925...
    1 <B39E9A9D-01FE-4C10-B4... {@{origin_timestamp=2017-04-14T13:20:29.6837...
    1 <8507F798-DF13-401E-A0... {@{origin_timestamp=2017-05-10T06:49:18.0711...
    2 <ZHJzOzI0MzA7MjE2NzY2N... {@{origin_timestamp=2017-05-09T13:11:44.9945...
    1 <4694423D-9792-414B-AC... {@{origin_timestamp=2017-06-11T21:54:27.2520...
    1 <00ce01d2ca6b$a2bf4080... {@{origin_timestamp=2017-05-11T15:31:15.4627...
    1 <800341D0-B858-40FF-B5... {@{origin_timestamp=2017-05-31T23:28:38.1485...
    1 <471CDA40-87E4-4B10-B1... {@{origin_timestamp=2017-05-22T22:05:55.7463...
    1 <6cecaebd-e7f0-4c6b-8c... {@{origin_timestamp=2017-04-09T17:16:49.5077...
    1 <04ab01d2bd89$00901ee0... {@{origin_timestamp=2017-04-25T05:58:38.1478...

Diese vereinfachte Ausgabe reicht auf jeden Fall aus, um Analysen in Bezug auf Absender, Empfänger, Größen und den Zustellstatus zu erhalten und ist der Detailausgabe vorzuziehen, wenn Sie nicht jeden einzelnen Schritt bei der Übertragung analysieren wollen. Die Datei ist auch signifikant kleiner:

Eine Besonderheit bei der "Summay"-Datei ist das Feld "Recipient-Status. Es enthält für jeden Empfänger

$summary | ft recipient_status

recipient_status
---------------- User1@msxfaq.net##Deliver, Resolve;User1@msxfaq.onmicrosoft.com##Receive; User1@msxfaq.onmicrosoft.com##Receive;User1@msxfaq.net##Deliver, Resolve;
invalid@invalid.onmicrosoft.com##Fail; User1@msxfaq.net##Deliver, Resolve;User1@msxfaq.onmicrosoft.com##Receive; User1@msxfaq.net##Receive, Expand, Deliver;User2@msxfaq.net##Receive, Expand, Deliver;User3@msxfaq.net##Receive, Expand, Deliver

In der letzten Zeile sehen Sie eine Mail, die an drei Empfänger gegangen ist. der Status jedes einzelnen Empfängers ist hier aufgelistet. Die verschiedenen Empfängern werden per ";" (Semikolon) voneinander getrennt, während dann die Liste der Aktionen durch Kommas getrennt mit einem "##" hinter die Mailaddresse wurden.

Solche eine "Summary" gibt es On-Prem nicht.

Tracking mit PowerShell

Natürlich müssen Sie nun all diese Aktionen nicht jedes Mal per Browser anstarten. Gerade die Archivierung der "Summary"-Berichte kann durchaus interessant sein. Microsoft hält diese nur 90 Tage auf und vielleicht wollen Sie ja diese Informationen für interne Revisionen, Archive oder auch nur zur Auswertung länger aufbewahren. Dann ist es an der Zeit den Zugriff zu automatisieren. Sie verbinden sich also wie gewohnt mit der Exchange Online PowerShell.

$session = New-PSSession `
   -ConfigurationName Microsoft.Exchange `
   -Authentication Basic `
   -ConnectionUri https://ps.outlook.com/powershell `
   -AllowRedirection:$true `
   -Credential (Get-Credential)
Import-PSSession $session

Und dann können Sie mit etwas anderen Commandlets das Tracking ausführen:

Get-MessageTrace `
   -SenderAddress User@msxfaq.de `
   -StartDate (get-date).addhours(-10) `
   -EndDate   (get-date).addhours(-8) `
| Export-Csv pathfilename.csv

Folgende Properties liefert das Commandlet zurück

Get-MessageTrace | gm

   TypeName: Deserialized.Microsoft.Exchange.Management.FfoReporting.MessageTrace

Name               MemberType   Definition
----               ----------   ----------
GetType            Method       type GetType()
ToString           Method       string ToString(), string ToString(string fo...
EndDate            Property     System.DateTime {get;set;}
FromIP             Property     System.String {get;set;}
Index              Property     System.Int32 {get;set;}
MessageId          Property     System.String {get;set;}
MessageTraceId     Property     System.Guid {get;set;}
Organization       Property     System.String {get;set;}
Received           Property     System.DateTime {get;set;}
RecipientAddress   Property     System.String {get;set;}
SenderAddress      Property     System.String {get;set;}
Size               Property     System.Int32 {get;set;}
StartDate          Property     System.DateTime {get;set;}
Status             Property     System.String {get;set;}
Subject            Property     System.String {get;set;}
ToIP               Property      {get;set;}

Sie bekommen hier aber nur eine Kurzfassung. Bei meinem Teste gab es pro Mail immer nur zwei Einträge., Einmal mit dem Status "Resolved" und einmal "Deliverd". Wichtiger ist bei dem Eintrag aber der Inhalt der Felder "Recipient Address" und "Get-MessageTraceDetail". Dieses Felder sind mit dem Commandlet "Get-MessageTraceDetail" verpflichtend für eine Detailausgabe:

Get-MessageTraceDetail `
   -MessageTraceId 12345678-1234-1234-1234-1234567890 `
   -RecipientAddress User1@msxfaq.net

Date                   Event                Detail
----                   -----                ------
15.06.2017 20:23:05    Empfangen            Nachricht empfangen von: AM4PR01...
15.06.2017 20:23:05    Auflösen             Die Nachricht wurde zu "User1@ms...

Andere Berichte

Neben dem individuellen Messagetracking zu einzelnen Mails stellt Office 365 auch verschiedene Reports bereit.

Diese Berichte laufen aber eher auch statistische Aussagen hinaus und haben nicht direkt etwas mit dem Messagetracking zu tun.

Weitere Links