Exchange ReadTracking: Has a mail already been read?

From time to time it happens that a Remove mail from the mailboxes for example because the email should not have been sent in this way. Experience has shown that this often happens with internal newsletters. The question often arises as to whether the mail has already been read, and if so, by how many recipients. With Exchange servers, ReadTracking can be activated for this purpose, allowing you to check for each recipient of an email whether the email has been marked as read in the mailbox.

The ReadTracking feature is not activated by default and must therefore be activated first:

Set-OrganizationConfig -ReadTrackingEnabled $true
Activate Exchange ReadTracking

The above command activates ReadTracking for all new mails, so the read status of mails sent before activation cannot be checked.

If ReadTracking has been activated, users can also access the delivery report generated in this way. In Outlook, the "Message delivery report" button can be found next to a sent email:

Outlook message delivery report

The button opens the browser and retrieves the delivery report in OWA, here is an example of a delivery report from the sender's point of view:

Delivery report of a mail

The delivery report contains information on every recipient, ReadTracking only works within the Exchange organization. It is therefore not possible to check whether an external recipient has read the mail in this way.

With the Exchange Shell, however, admins also have the option of querying the read status for a mail. For this to work, this small PowerShell function is required first:

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
}

The function can simply be added to the Exchange Shell:

Exchange ReadTracking PowerShell

The "Get-MessageReadEvents" function is now available. "Get-MessageReadEvents" expects the sender and the MessageID of the mail for which the delivery report is to be displayed as parameters, here is an example of an unread mail:

Exchange ReadTracking: Has a mail already been read?

Once the mail has been marked as read, this is also shown in the ReadTracking report:

ReadTracking Report

The MessageID can be read from the MessageTracking logs using the following command, for example:

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

The ReadTracking Report can then be queried using the sender and the MessageID:

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

More examples of message tracking can be found in the following articles:

4 thoughts on “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

    Reply
  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.

    Reply
  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

    Reply

Leave a Comment