Exchange ServerDeep dive

Exchange Server NDR and SMTP status codes: a quick reference with causes and fixes

Look up an Exchange Server NDR or queue status code: what each 4.x.x and 5.x.x code means, the usual on-premises or hybrid cause and the first cmdlet or setting to check.

Every Exchange non-delivery report (NDR) and stuck queue carries a status code such as 550 5.1.1 or 451 4.4.0, and that code tells you where to start. Below are the codes Exchange Server SE, 2019 and 2016 return for common failures, from Microsoft's reference, with the usual on-premises cause and first check. Press Ctrl+F, type your code and follow the guide link where there is one.

Codes in this quick reference

  • 4.3.1 Insufficient system resourcesNDR / queue LastError
  • 4.3.2 Service not available / Service not activeNDR / queue LastError
  • 4.4.0 DNS query failedQueue LastError
  • 4.4.1 Connection timed outNDR / queue LastError
  • 4.4.2 Connection droppedNDR / queue LastError
  • 4.4.7 Message delayed / Queue expired; message expiredNDR / delay notification
  • 5.1.0 Sender deniedNDR
  • 5.1.1 RESOLVER.ADR.ExRecipNotFound; not found / User unknownNDR

+ 30 more codes in the tables below.

How this guide is organised: How to read an Exchange status code → Temporary failures (4.x.x) → 5.1.x → 5.2.x → 5.3.x → 5.4.x → 5.5.x and 5.6.x → 5.7.x → Hybrid → How to test after a fixFlow diagram of the article's sections in reading order: 1. How to read an Exchange status code. 2. Temporary failures (4.x.x). 3. 5.1.x. 4. 5.2.x. 5. 5.3.x. 6. 5.4.x. 7. 5.5.x and 5.6.x. 8. 5.7.x. 9. Hybrid. 10. How to test after a fix. Toolbox: Get-Queue, Set-TransportService, Get-TransportAgent, LastError, FAIL.1How to read anExchange stat…2Temporaryfailures (4.x.x)35.1.x45.2.x55.3.x65.4.x75.5.x and 5.6.x85.7.x9Hybrid10How to testafter a fixTOOLBOXGet-QueueSet-TransportServiceGet-TransportAgentLastErrorFAILHow this guide is organised: How to read an Exchange status code → Temporary failures (4.x.x) → 5.1.x → 5.2.x → 5.3.x → 5.4.x → 5.5.x and 5.6.x → 5.7.x → Hybrid → How to test after a fixFlow diagram of the article's sections in reading order: 1. How to read an Exchange status code. 2. Temporary failures (4.x.x). 3. 5.1.x. 4. 5.2.x. 5. 5.3.x. 6. 5.4.x. 7. 5.5.x and 5.6.x. 8. 5.7.x. 9. Hybrid. 10. How to test after a fix. Toolbox: Get-Queue, Set-TransportService, Get-TransportAgent, LastError, FAIL.1How to read an Exchange status code2Temporary failures (4.x.x)35.1.x45.2.x55.3.x65.4.x75.5.x and 5.6.x85.7.x9Hybrid10How to test after a fixTOOLBOXGet-QueueSet-TransportServiceGet-TransportAgentLastErrorFAIL
At a glance: how this guide is organised · 10 sections · 5 key settings and tools

How to read an Exchange status code#

In 550 5.1.1, the three-digit SMTP reply comes first (4xx: try later; 5xx: give up). The enhanced status code after it, defined in RFC 3463 as class.subject.detail, is what you look up:

  • Class: 4 is temporary (the sender retries); 5 is permanent (the message bounces).
  • Subject: 1 addressing, 2 mailbox, 3 mail system, 4 network and routing, 5 SMTP protocol, 6 content or media, 7 security or policy.
  • Detail: one to three digits, so 5.7.1 and 5.7.900 are different problems.

Where to find it:

  • The NDR: open Diagnostic information for administrators. Generating server wrote the NDR; a remote server listed under the recipient refused the message during the SMTP session, and Exchange passes its response through unchanged.
  • Queues: 4.x.x failures wait in a Retry queue; Queue Viewer and Get-Queue show the response in LastError. By default the sender gets a delay notice after 4 hours and an NDR when the message expires after 2 days (DelayNotificationTimeout, MessageExpirationTimeout on Set-TransportService).
  • Message tracking: FAIL events hold the code in RecipientStatus (tracking guide).
Text
Diagnostic information for administrators:
Generating server: EX01.contoso.com
jane@fabrikam.com
Remote Server returned '550 5.1.1 User unknown'
PowerShell
# Retry queues on this server
Get-Queue | Where-Object Status -eq 'Retry' | Format-List Identity,NextHopDomain,MessageCount,LastError

# Failures in the last 24 hours, all transport servers
Get-TransportService | Get-MessageTrackingLog -EventId FAIL -Start (Get-Date).AddHours(-24) -ResultSize Unlimited |
    Select-Object Timestamp,Sender,Recipients,RecipientStatus

Temporary failures (4.x.x)#

Exchange retries these: fix the cause, then retry the queue.

CodeWhat it meansUsual on-premises causeFirst check
4.3.1Insufficient system resourcesBack pressure: low disk space on the queue database drive, or low memory (avoid dynamic memory on VMs)Queue drive free space; Get-ExchangeDiagnosticInfo -Process EdgeTransport -Component ResourceThrottling. Guide
4.3.2Service not available / Service not activeInactive components, a custom port 25 receive connector in the Transport service instead of Front End Transport, or an incompatible transport agentGet-ServerComponentState -Identity EX01; connector TransportRole; Get-TransportAgent. Guide
4.4.0DNS query failedTransport's DNS servers (the network adapter's by default) don't answer, or a remote domain's DNS mishandles AAAA queriesGet-TransportService | Format-List Name,ExternalDNS*,InternalDNS*; Resolve-DnsName fabrikam.com -Type MX. Guide
4.4.1Connection timed outOutbound port 25 blocked by a firewall or ISP, or the destination or smart host is downTest-NetConnection mx.fabrikam.com -Port 25 from the server. Guide
4.4.2Connection droppedSession cut by a receiving-side size or rate limit, or by an antispam appliance, SMTP proxy or firewallSmtpSend protocol log; firewall SMTP inspection. Guide
4.4.7Message delayed / Queue expired; message expiredExpired after failed retries: wrong DNS vs smart host routing, a connector FQDN not matching your MX name, Mailbox Transport Delivery stopped at the destination, TNEF trouble there, or your SPF record missing a sourceGet-SendConnector | Format-List Name,DNSRoutingEnabled,SmartHosts,Fqdn. Guide

5.1.x: addressing#

CodeWhat it meansUsual on-premises causeFirst check
5.1.0Sender deniedReplies to old or saved messages, broken contacts, or sender filtering (including Blocked Senders via safelist aggregation)Pick the recipient again; Get-SenderFilterConfig
5.1.1RESOLVER.ADR.ExRecipNotFound; not found / User unknownThe address doesn't exist, or a re-created mailbox meets stale autocomplete entries (old X.500 / LegacyExchangeDN)Get-Recipient jane@contoso.com; an IMCEAEX address means a missing X500 proxy. Guide
5.1.3STOREDRV.Submit; invalid recipient addressUnsupported characters or bad formatting in the addressThe exact address in the NDR or app
5.1.4Recipient address reserved by RFC 2606Reserved top-level domain (.test, .example, .invalid, .localhost)Receive connector RejectReservedTopLevelRecipientDomains
5.1.5Recipient address reserved by RFC 2606Reserved second-level domain (example.com, example.net, example.org)Receive connector RejectReservedSecondLevelRecipientDomains
5.1.6Recipient addresses in single label domains not acceptedAn address like chris@contoso with no top-level domainReceive connector RejectSingleLabelRecipientDomains
5.1.7Invalid address / Unknown sender addressWrong or malformed sender (MAIL FROM) address, typically from an appThe app's From address
5.1.8Access denied, bad outbound senderA message rate limit was exceeded, typically by an app server relaying bulk mailMessageRateLimit on the app's receive connector

5.2.x: mailbox#

CodeWhat it meansUsual on-premises causeFirst check
5.2.1Content Filter agent quarantined this messageContent filtering rated it as spam and quarantined itGet-ContentFilterConfig; exceptions with Set-ContentFilterConfig
5.2.2Mailbox fullThe recipient is over the quota that blocks receivingGet-MailboxStatistics jane | Format-List TotalItemSize; ProhibitSendReceiveQuota
5.2.3RESOLVER.RST.RecipSizeLimit; message too large for this recipientBigger than the recipient's own size limitMaxReceiveSize on the mailbox or group. Guide

5.3.x: mail system#

CodeWhat it meansUsual on-premises causeFirst check
5.3.0Too many related errorsJudged malformed and moved to the poison message queueGet-Message -Queue EX01\Poison. Guide
5.3.2STOREDRV.Deliver: Missing or bad StoreDriver MDB propertiesABP Routing agent enabled, and the recipient isn't in their address book policy's GALGet-Mailbox jane | Format-List AddressBookPolicy
5.3.3Unrecognized commandA receive connector carrying internal mail lacks Exchange Server authenticationGet-ReceiveConnector | Format-Table Name,AuthMechanism
5.3.4Message size exceeds fixed maximum message sizeOver a size limit on the route: organization, connector or remote systemGet-TransportConfig | Format-List MaxSendSize,MaxReceiveSize; connector MaxMessageSize. Guide
5.3.5System incorrectly configuredMail loop: a receive connector's FQDN matches another server, service or device in your mail flowGet-ReceiveConnector | Format-Table Name,Fqdn

5.4.x: network and routing#

CodeWhat it meansUsual on-premises causeFirst check
5.4.4SMTPSEND.DNS.NonExistentDomain; nonexistent domainA DNS or network adapter problem on the Exchange server, or a mistyped domainDNS settings on Get-TransportService and Get-FrontEndTransportService; adapter priority. Guide
5.4.6Hop count exceeded - possible mail loopA loop, stopped after 20 hops by default: Inbox or forwarding rules, a targetAddress on a mailbox, or routing changesGet-InboxRule -Mailbox jane; forwarding; restart both transport services after routing changes. Guide

5.5.x and 5.6.x: protocol and content#

Microsoft's Exchange Server list has no common 5.6.x codes; content problems appear as 5.2.1, 5.3.0 or a mail flow rule code.

CodeWhat it meansUsual on-premises causeFirst check
5.5.2Send hello firstThe client sent AUTH or MAIL FROM before EHLO/HELOReceive protocol log; the app's SMTP library
5.5.3Too many recipientsTo, Cc and Bcc exceed the organization, connector or sender limitMaxRecipientEnvelopeLimit, connector MaxRecipientsPerMessage, mailbox RecipientLimits

5.7.x: security and policy#

Read the text after 5.7.1: it has three meanings. 5.7.54 isn't in Microsoft's NDR reference; its wording below is the SMTP response admins report from Exchange 2016 and 2019 servers.

CodeWhat it meansUsual on-premises causeFirst check
5.7.1Unable to relayAn app or device relays to external recipients through a connector that doesn't allow itWhich connector answered (protocol log); a relay connector scoped by RemoteIPRanges. Guide
5.7.1Client was not authenticatedAnonymous SMTP where sign-in is required: Default Frontend lost AnonymousUsers, or an app uses port 587 without authenticatingGet-ReceiveConnector "EX01\Default Frontend EX01" | Format-List PermissionGroups. Guide
5.7.1Delivery not authorized, message refusedThe recipient accepts only authenticated or listed senders, or a mail flow rule rejected it with the default codeRequireSenderAuthenticationEnabled, AcceptMessagesOnlyFrom*; mail flow rules
5.7.3Cannot achieve Exchange Server authentication / Not AuthorizedA firewall strips the X-EXPS command servers authenticate with, or internal traffic hits a custom connector lacking Exchange Server authenticationCustom connectors' RemoteIPRanges; SMTP inspection between servers
5.7.54Unable to relay recipient in non-accepted domainAnonymous relay to an outside domain without ms-Exch-SMTP-Accept-Any-Recipient, or inbound mail for a non-accepted domainGet-AcceptedDomain; relay connector permissions. Guide
5.7.900-5.7.999Delivery not authorized, message refusedA mail flow rule rejected it with a custom code from this rangeGet-TransportRule | Format-Table Name,State,RejectMessageEnhancedStatusCode

Hybrid: codes from Exchange Online#

In hybrid, Exchange Online writes some NDRs (check the generating server). These codes are most tied to on-premises setup; use message trace plus on-premises tracking.

CodeWhat it meansUsual causeFirst check
4.4.317Cannot connect to remote server [Message=UntrustedRoot]Your server sent its certificate without the full chain, so Exchange Online couldn't validate itIntermediate CA certificates on every server receiving from Exchange Online
5.1.10Recipient not foundNo such address in Exchange Online, for example a cloud mailbox lacking the tenant.mail.onmicrosoft.com address on-premises routes toGet-RemoteMailbox jane | Format-List RemoteRoutingAddress. Guide
5.3.190Journaling on-premises messages to Microsoft 365 or Office 365 not supported when Journaling Archive is disabledAn on-premises journal rule targets Microsoft 365 while Journaling Archive is offGet-JournalRule
5.4.1Recipient address rejected: Access denied / Relay Access DeniedDirectory-Based Edge Blocking: the recipient isn't in Exchange Online's directory (not synced, or the domain should be Internal Relay). Relay Access Denied: the domain isn't accepted thereAccepted domain type in Exchange Online; directory sync. Guide
5.4.14Routing loop detectedA loop caught by Exchange Online (on-premises reports 5.4.6), for example a recipient each side routes to the otherMessage trace plus on-premises tracking; RemoteRoutingAddress. Guide
5.7.64TenantAttribution; Relay Access DeniedThe inbound connector from on-premises no longer matches your servers after a change such as a new IP or certificateGet-InboundConnector | Format-List SenderIPAddresses,TlsSenderCertificateName. Guide

How to test after a fix#

  1. Retry now: Retry-Queue -Filter "Status -eq 'Retry'" -Server EX01. Good: the queue drains and LastError clears.
  2. Server to server: in a shell connected to EX01, run Test-Mailflow -Identity EX01 -TargetMailboxServer EX02; good is TestMailflowResult : Success.
  3. Replay SMTP: Microsoft marks Send-MailMessage obsolete (it can't guarantee a secure connection), so from the failing machine run Test-NetConnection mail.contoso.com -Port 25 (good: TcpTestSucceeded : True), then a manual Telnet session (Install-WindowsFeature Telnet-Client) and check the server's SMTP protocol log.
  4. Track it: send from a test mailbox or the Telnet session; good is RECEIVE then DELIVER (local mailbox) or SEND (next hop), with no new FAIL.
Text
telnet mail.contoso.com 25
220 EX01.contoso.com Microsoft ESMTP MAIL Service ready at ...
EHLO test.fabrikam.com
250-EX01.contoso.com Hello [203.0.113.25]
...
MAIL FROM:<tester@fabrikam.com>
250 2.1.0 Sender OK
RCPT TO:<jane@contoso.com>
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
Subject: test

.
250 2.6.0 <message-id> [InternalId=...] Queued mail for delivery
QUIT
PowerShell
Get-TransportService | Get-MessageTrackingLog -Sender tester@fabrikam.com -Start (Get-Date).AddMinutes(-30) |
    Sort-Object Timestamp | Format-Table Timestamp,EventId,Source,Recipients

References#

Revision history: Oct 2026 — re-checked against Microsoft Learn: 2 corrections; 1 detail reworded or labelled as reported by admins.

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)