Exchange ReadTracking: Wurde eine Mail bereits gelesen?

Ab und an kommt es vor, dass man eine Mail aus den Postfächern entfernen muss, beispielsweise weil die Mail so nicht hätte verschickt werden sollen. Erfahrungsgemäß passiert dies häufig bei internen Newslettern. Oft kommt dann auch die Frage auf, ob und wenn ja von wie vielen Empfängern die Mail bereits gelesen wurde. Bei Exchange Servern lässt sich dazu das ReadTracking aktivieren, Somit lässt sich für jeden Empfänger einer Mail prüfen, ob die Mail im Postfach als gelesen markiert wurde.

Das ReadTracking Feature ist in der Standardeinstellung nicht aktiviert und muss daher zunächst eingeschaltet werden:

Set-OrganizationConfig -ReadTrackingEnabled $true
Exchange ReadTracking aktivieren

Der oben genannte Befehl aktiviert das ReadTracking für alle neuen Mails, der Gelesen Status von Mails die vor der Aktivierung gesendet wurden, lässt sich also nicht prüfen.

Wenn das ReadTracking aktiviert wurde, können auch Benutzer auf den so erzeugten Zustellbericht zugreifen. In Outlook findet sich dazu bei einer gesendeten Mail die Schaltfläche „Nachrichtenzustellbericht“:

Outlook Nachrichtenzustellbericht

Die Schaltfläche den Browser und ruft in OWA den Zustellbericht ab, hier mal ein Beispiel eines Zustellberichts aus Sicht des Absenders:

Zustellbericht einer Mail

Der Zustellbericht erhält Informationen zu jedem Empfänger, das ReadTracking funktioniert nur innerhalb der Exchange Organisation. Ob ein externer Empfänger die Mail gelesen hat, lässt sich auf diesem Weg also nicht prüfen.

Mit der Exchange Shell bekommen aber auch Admins die Möglichkeit den Gelesen Status für eine Mail abzufragen. Damit dies funktioniert, wird zunächst einmal diese kleine PowerShell Funktion benötigt:

function Get-MessageReadEvents{
	Param(
		[parameter(Mandatory=$true,Position=1)]
		[string]$Mailbox,
		[parameter(Mandatory=$true,Position=1)]
		[string]$MessageId
		)

	$Message = Search-MessageTrackingReport -Identity $Mailbox -MessageId $MessageID -BypassDelegateChecking

	$TrackingReport = Get-MessageTrackingReport -Identity $Message.MessageTrackingReportId -BypassDelegateChecking
	$RecipienttrackingEvents = @($TrackingReport | Select -ExpandProperty RecipientTrackingEvents)

	$ReadEvents = @()
	$Recipients = $RecipienttrackingEvents | select RecipientAddress
	foreach ($Recipient in $Recipients) {
		$Events = Get-MessageTrackingReport -Identity $Message.MessageTrackingReportId -BypassDelegateChecking -RecipientPathFilter $Recipient.RecipientAddress -ReportTemplate RecipientPath
		$ReadEventsline = $Events.RecipientTrackingEvents[-1] | Select RecipientAddress,Status,EventDescription
		$ReadEvents += $ReadEventsline
	}
	return $ReadEvents
}

Die Funktion kann einfach in die Exchange Shell eingefügt werden:

Exchange ReadTracking PowerShell

Jetzt ist die Funktion „Get-MessageReadEvents“ verfügbar. „Get-MessageReadEvents“ erwartet als Parameter den Absender und die MessageID der Mail für die der Zustellbericht angezeigt werden soll, hier mal ein Bespiel für eine ungelesene Mail:

Exchange ReadTracking: Wurde eine Mail bereits gelesen?

Nachdem die Mail als Gelesen markiert wurde, wird dies auch im ReadTracking Report dargestellt:

ReadTracking Report

Die MessageID kann aus der MessageTracking Logs ausgelesen werden, dazu kann beispielsweise der folgende Befehl verwendet werden:

Get-MessageTrackingLog -Sender frank@frankysweb.de -Start (get-date).AddMinutes(-10) -EventId Send | fl sender,recipients,messagesubject,messageid

Der ReadTracking Report kann dann anhand des Absenders und der der MessageID abgefragt werden:

Get-MessageReadEvents -Mailbox frank@frankysweb.de -MessageId e3b6194a63a241dc8ea207cc31d7c84f@frankysweb.de

Mehr Beispiele für die Nachrichtenverfolgung finden sich unter den folgenden Artikeln:

4 Gedanken zu „Exchange ReadTracking: Wurde eine Mail bereits gelesen?“

  1. Hallo Frank,

    danke für die Anleitung, leider kommt bei mir, wenn ich den Zustellbericht öffnen will:
    Server Error in ‚/‘ Application.
    The resource cannot be found.
    Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

    Requested URL: /options/ecp/PersonalSettings/DeliveryReport.aspx

    Hast du eine Idee was das Problem sein kann? Sind virtuelle Verzeichnisse falsch im IIS?
    Habe Exchange 2016

    Antworten
  2. Danke für den Artikel – wie verhält sich die Option bezüglich der Privatsühäre und Datenschutz.
    Die Option kann genutzt werden, um jemand zu überwachen, ob er die Mail gelesen hat oder nicht.

    Antworten
  3. Moin,

    ich wollte es mal testen. Erstmal hatte ich das Modul hinzugefügt:
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

    Danach stand mir der Befehl Get-OrganizationConfig zur Verfügung. Der Parameter -ReadTrackingEnabled wir mir aber nicht angezeigt und beim Ausprobieren mit einer Fehlermeldung quittiert:
    et-OrganizationConfig : Es wurde kein Parameter gefunden, der dem Parameternamen „ReadTrackingEnabled“ entspricht.
    In Zeile:1 Zeichen:24
    + Get-OrganizationConfig -ReadTrackingEnabled $true
    + ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Get-OrganizationConfig], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.Exchange.Management.SystemConfigurationTasks.GetOrganizationConfig

    Server: Version 1809 (17763.1817)
    Exchange: 15.02.0792.013
    Powershell Version: 5.1.17763.1490

    Jemand eine Idee?

    MfG,
    Blackii

    Antworten

Schreibe einen Kommentar