Partir du message et de son chemin
« Le courriel n’arrive pas » peut désigner un refus avant Exchange Online, une règle de transport, une boîte pleine, une quarantaine ou un échec du serveur destinataire. Ces dix commandes aident à trouver l’étape concernée et à préparer une correction précise.
Relevez direction entrant/sortant, adresses exactes, heure et fuseau, Message-ID complet, NDR et code SMTP. Conservez les en-têtes du message original. Les exemples contoso.com et example.com sont fictifs; les commandes lisent la configuration ou les traces et n’envoient pas de message.
Ce guide complète les articles DMARC et courriels indésirables : il se concentre sur le trajet, les connecteurs et les restrictions. Il ne remplace pas une investigation complète du flux ou un audit de sécurité.
Préparer la session et les permissions
Utilisez un module ExchangeOnlineManagement pris en charge qui expose les deux cmdlets V2. Vérifiez leur présence après connexion. Les notes de version Microsoft et la matrice de prérequis doivent guider les mises à jour; les versions 3.5.0 à 3.9.2 sous PowerShell 7 nécessitent PowerShell 7.4.x. Préparez et validez la combinaison dans votre poste d’administration avant l’incident.
Utilisez une connexion interactive avec MFA et une identité nominative. Message Trace relève du RBAC Exchange : faites déléguer le rôle Message Tracking avec les entrées V2 disponibles dans votre locataire. Pour les autres commandes, faites déterminer les entrées Get et les paramètres nécessaires avec la procédure Microsoft, puis appliquez la portée de destinataires utile. N’accordez pas Global Administrator pour lancer ces diagnostics.
Un rôle de lecture des destinataires ou de la configuration n’autorise pas forcément les traces. Une commande absente ou un accès refusé doit être documenté comme non évalué. Exchange Online et les fonctionnalités de boîte doivent être couverts par les licences appropriées; ce guide n’exige pas à lui seul Defender for Office 365 Plan 2. Les recherches et remédiations Defender supplémentaires peuvent avoir leurs propres prérequis.
# Preparation and connection, outside the 10 diagnostic commands.
$ErrorActionPreference = 'Stop'
Get-Module -ListAvailable ExchangeOnlineManagement | Select-Object Name,Version
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
Get-Command Get-MessageTraceV2,Get-MessageTraceDetailV2 -ErrorAction Stop
# Use DateTime values to avoid ambiguous regional date strings.
$end = [datetime]::UtcNow
$start = $end.AddHours(-2)Lire les limites de Message Trace V2
Les traces V2 permettent une recherche sur les 90 derniers jours, avec au plus dix jours par requête. Get-MessageTraceV2 retourne 1 000 résultats par défaut, 5 000 au maximum. Atteindre le plafond impose de réduire la fenêtre ou de suivre la continuation documentée avec EndDate et StartingRecipientAddress; n’utilisez pas les anciens paramètres Page/PageSize.
Les horodatages de sortie sont en UTC. Les exemples construisent explicitement des DateTime UTC. Le service limite les requêtes; ne lancez pas une boucle de détails sur tout le locataire. Une trace n’est pas un journal de lecture utilisateur.
1. Retrouver le message avec Get-MessageTraceV2
Commencez par une fenêtre de deux heures et les adresses exactes. Les résultats sont par destinataire. Conservez le Message-ID original, distinct de MessageTraceId. Une absence de résultat peut provenir du délai d’ingestion, de la fenêtre, d’un alias ou d’un message qui n’a jamais atteint le service.
$trace = @(Get-MessageTraceV2 -SenderAddress 'alex@contoso.com' -RecipientAddress 'sam@example.com' -StartDate $start -EndDate $end -ResultSize 5000 -ErrorAction Stop)
$trace | Select-Object Received,SenderAddress,RecipientAddress,Subject,Status,MessageTraceId,MessageId2. Lire les événements avec Get-MessageTraceDetailV2
Suivez les événements et le code d’échec. Delivered n’est pas un accusé de lecture : pour un destinataire externe, confirmez la remise et l’interprétation avec le système distant; pour une boîte interne, examinez aussi règles, indésirables et quarantaine. Conservez l’objet complet si le détail affiché est insuffisant.
# Replace with the exact trace ID AND recipient from check 1.
Get-MessageTraceDetailV2 -MessageTraceId '11111111-1111-1111-1111-111111111111' -RecipientAddress 'sam@example.com' -StartDate $start -EndDate $end -ErrorAction Stop |
Select-Object Date,Event,Detail,Data3. Vérifier le type et les adresses du destinataire
Une boîte, un contact, un MailUser et un groupe n’ont pas le même chemin de remise. Vérifiez alias et cible externe, particulièrement en hybride. L’adresse primaire doit être connue; pour chercher un alias, utilisez une recherche ciblée appropriée. Une erreur d’accès ne prouve pas l’absence du destinataire.
Get-EXORecipient -PrimarySmtpAddress 'alex@contoso.com' -Properties EmailAddresses,ExternalEmailAddress -ErrorAction Stop |
Select-Object DisplayName,RecipientTypeDetails,PrimarySmtpAddress,EmailAddresses,ExternalEmailAddress4. Lire les restrictions et quotas d’une boîte
Comparez le NDR aux limites réelles. Une exigence d’expéditeur authentifié peut expliquer un refus externe; une liste d’autorisation ou une modération mérite aussi examen. Ce contrôle vise une boîte : utilisez les cmdlets du type approprié pour un groupe. Une limite Unlimited peut laisser d’autres limites du service s’appliquer.
Get-Mailbox -Identity 'alex@contoso.com' -ErrorAction Stop |
Select-Object PrimarySmtpAddress,MaxSendSize,MaxReceiveSize,IssueWarningQuota,ProhibitSendQuota,ProhibitSendReceiveQuota,RequireSenderAuthenticationEnabled,AcceptMessagesOnlyFromSendersOrMembers,RejectMessagesFromSendersOrMembers,ModerationEnabled5. Comparer taille et quota de la boîte
Comparez la taille aux quotas du contrôle 4 sans comparer naïvement des chaînes de texte. La boîte principale, l’archive et Recoverable Items ont des limites distinctes. Une taille élevée est un indice, pas une explication suffisante sans événement ou NDR correspondant. N’effacez pas des messages pour faire un test.
Get-EXOMailboxStatistics -Identity 'alex@contoso.com' -ErrorAction Stop |
Select-Object DisplayName,ItemCount,TotalItemSize,TotalDeletedItemSize6. Inspecter les connecteurs entrants
Comparez la configuration à l’IP publique réellement présentée et au certificat du serveur émetteur. Un changement de NAT ou de certificat peut casser un relais. Ne remplacez pas une portée précise par « toutes les IP » pour rétablir le flux. Une configuration correcte ne prouve pas que le connecteur a traité ce message.
Get-InboundConnector -ErrorAction Stop |
Select-Object Identity,Name,Enabled,ConnectorType,SenderDomains,SenderIPAddresses,RequireTls,TlsSenderCertificateName,RestrictDomainsToIPAddresses,RestrictDomainsToCertificate7. Inspecter les connecteurs sortants
Contrôlez destination, smart host et TLS, puis corrélez la sélection avec les règles de transport. En routage centralisé hybride, le problème peut être après Exchange Online. Un Get ne valide ni le certificat distant ni la connectivité; utilisez la validation de connecteur prévue dans l’EAC et un message test autorisé.
Get-OutboundConnector -ErrorAction Stop |
Select-Object Identity,Name,Enabled,ConnectorType,RecipientDomains,SmartHosts,UseMXRecord,TlsSettings,TlsDomain,RouteAllMessagesViaOnPremises,IsTransportRuleScoped8. Lire l’ordre et les actions des règles de transport
L’ordre, les exceptions et StopRuleProcessing peuvent expliquer une différence entre deux destinataires. Lisez Description et le détail complet de la règle retenue. Ne désactivez pas toutes les règles : reproduisez avec un message fictif et une portée pilote. Une règle présente peut être désactivée ou en mode test.
Get-TransportRule -ResultSize Unlimited -ErrorAction Stop |
Sort-Object Priority |
Select-Object Identity,Name,State,Mode,Priority,Description,StopRuleProcessing9. Lire l’exception SMTP AUTH de la boîte
True désactive SMTP AUTH pour cette boîte; False l’active à ce niveau; Null hérite du paramètre organisationnel. D’autres contrôles peuvent encore bloquer la connexion. Cette lecture ne prouve ni l’utilisation de Basic Authentication ni celle d’OAuth. Identifiez d’abord si l’appareil utilise soumission authentifiée, relais ou envoi direct.
Get-CASMailbox -Identity 'device-mail@contoso.com' -ErrorAction Stop |
Select-Object PrimarySmtpAddress,SmtpClientAuthenticationDisabled10. Lire le réglage SMTP AUTH de l’organisation
Croisez ce booléen avec le contrôle 9, les stratégies d’authentification, Security Defaults et les journaux Entra applicables. Ne réactivez pas Basic Authentication comme correction. Documentez la méthode OAuth ou le relais supporté de l’application, puis validez l’envoi interne et externe séparément.
Get-TransportConfig -ErrorAction Stop |
Select-Object SmtpClientAuthenticationDisabledRelier les résultats à un diagnostic
Exemple fictif : une imprimante envoie à l’interne mais reçoit 5.7.64 pour l’externe après un changement de fournisseur Internet. Comparez l’IP publique actuelle à la portée du connecteur entrant et au NDR avant toute modification. Ce scénario oriente le diagnostic; il ne prouve pas que chaque erreur 5.7.64 a la même cause.
| Constat | Vérification suivante | Conclusion à éviter |
|---|---|---|
| Aucune trace | Période, alias, NDR et journal de l’émetteur | Exchange a perdu le message |
| Échec avec code SMTP | Détails par destinataire et restrictions | Il faut réessayer sans investigation |
| Delivered mais introuvable | Règles de boîte, indésirables, quarantaine ou serveur distant | L’utilisateur a lu le message |
| Relais appareil refusé | Chemin utilisé, IP publique et certificat | Il faut ouvrir le relais à toutes les IP |
| SMTP AUTH bloqué | Paramètres effectifs et méthode d’authentification | Il faut réactiver Basic |
Corriger sur une portée pilote et valider
Les dix commandes ne changent rien dans le locataire. Une modification de connecteur, règle, quota ou authentification doit avoir son propre plan : propriétaire, état initial exporté, justification, portée pilote, fenêtre et retour arrière. Ne supprimez pas une règle avant de préserver ses conditions, actions, exceptions et priorité.
Validez un message fictif dans chaque sens nécessaire : interne, entrant externe et sortant externe. Conservez le NDR éventuel, la nouvelle trace et le résultat chez le destinataire. L’envoi de test est une action distincte à autoriser selon votre procédure; ne transmettez pas de données réelles pour reproduire.
Après modification, relisez le réglage concerné et surveillez les flux légitimes. Le retour arrière restaure les valeurs précédentes documentées. Une modification DNS peut rester en cache selon le TTL; un retour à l’ancienne valeur n’est pas instantané partout.
Enregistrez compte collecteur, locataire, période UTC, versions et erreurs dans un dossier protégé avec rétention définie. Les traces peuvent contenir sujets, adresses et détails de routage sensibles. Fermez la session à la fin.
Un accompagnement Microsoft 365 peut corréler ces preuves avec l’hybride, les applications et les contrôles de sécurité, puis préparer une correction qui respecte les usages métier.
Disconnect-ExchangeOnline -Confirm:$false