Website-Icon Frankys Web

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

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“:

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

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:

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:

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

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:

Die mobile Version verlassen