(modifié le 19 octobre 2018 à 0:25)

Pour vérifier si un email a bien été relayé ou refusé par vos serveurs exchange il faut aller chercher dans les logs. Quand je parle de logs je parle des journaux emails, pas de logs exchange système (connecteurs, etc).

Voyons comment faire avec Exchange 2016 (ou 2013) en CLI powershell.

PowerShell

Si Exchange 2010 proposait une console graphique (explorateur des journaux de suivi) pour la recherche il faut passer en mode CLI à partir de Exchange 2013 avec Exchange Management Shell.

Depuis l'ID d'un message

Si vous connaissez l'ID d'un message comme il s'agit d'un identifiant unique vous pouvez le rechercher :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -MessageId b1876b84-0d48-4e10-8af5-0fa74053f383@SRV1.bm.ad | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Recipients,MessageSubject | Sort-Object -Property Timestamp

Filtre sur l'expéditeur (sender)

Pour filtrer sur l'émetteur d'un email :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Sender toto@blogmotion.fr | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Sender,Recipients,MessageSubject | Sort-Object -Property Timestamp

Filtre sur le destinataire (recipient)

Pour filtrer sur le destinataire d'un email :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog –Recipients toto@blogmotion.fr | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Sender,Recipients,MessageSubject | Sort-Object -Property Timestamp

Avec wildcard :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog –Recipients *@blogmotion.fr | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Sender,Recipients,MessageSubject | Sort-Object -Property Timestamp

Filtrage horaire

Au format MM/JJ/AAAA et format horaire 24 : :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Recipients toto@blogmotion.fr -Start "05/24/2018 8:00" -End "05/24/2018 22:00" | Select-Object Timestamp,ServerHostname,ClientHostname

Filtre sur l'objet

Pour lister tous les emails contenant *expiration de votre compte* :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Recipients toto@blogmotion.fr | where-object {$_.MessageSubject -like "*expiration de votre compte*"} | Select-Object Timestamp,ServerHostname,ClientHostname,Source,Sender,EventId,Recipients,MessageSubject | Sort-Object -Property Timestamp

Filtre SEND / RECEIVE

Il est aussi possible de faire un filtre pour savoir si l'email a été émis (SEND) :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Sender toto@blogmotion.fr -Start "05/02/2018 9:00" -End "05/02/2018 10:00" -Eventid SEND | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Sender,Recipients,MessageSubject | Sort-Object -Property Timestamp

Ou reçu (RECEIVE) :

$Servers=Get-ExchangeServer; $Servers | where {$_.isHubTransportServer -eq $true -or $_.isMailboxServer -eq $true} | Get-MessageTrackingLog -Sender toto@blogmotion.fr -Start "05/02/2018 9:00" -End "05/02/2018 10:00" -Eventid RECEIVE | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,Sender,Recipients,MessageSubject | Sort-Object -Property Timestamp

Conclusion

Pas forcément super pratique, vous pouvez vous faire un script powershell pour faciliter la recherche, avec une petite interface graphique pourquoi pas.

Doc technet microsoft

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter