Exchange ServerTroubleshooting

550 5.3.4 ROUTING.SizeLimit and 5.2.3: every Exchange message size limit in one place

Large messages bouncing with 5.3.4 ROUTING.SizeLimit or 5.2.3 RecipSizeLimit? Every Exchange size limit with its default, how they interact and how to raise them safely.

A user attaches a 20 MB file and gets 550 5.3.4 ROUTING.SizeLimit, or an external sender reports 550 5.2.3 RESOLVER.RST.RecipSizeLimit. Exchange checks message size in several places and enforces the most restrictive limit on the message's path. This post lists every limit with its default, explains the interactions that surprise people, and gives a safe way to change them on Exchange Server SE and 2019 (2016 is the same).

Errors this guide fixes

  • 550 5.3.4 ROUTING.SizeLimit; message size exceeds fixed maximum size for routeNDR / Get-MessageTrackingLog
  • 550 5.2.3 RESOLVER.RST.RecipSizeLimit; message too large for this recipientNDR
How this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (4 steps: Find the limit that fired; Inventory every limit in one pass; Change the limits consistently; Adjust web clients if needed). 4. Verify the fix. 5. Prevent it next time. Toolbox: Set-TransportConfig, Set-ReceiveConnector, Set-SendConnector, MaxReceiveSize, MaxSendSize.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it nexttime1Find the limit that fired2Inventory every limit inone pass3Change the limitsconsistently4Adjust web clients ifneededTOOLBOXSet-TransportConfigSet-ReceiveConnectorSet-SendConnectorMaxReceiveSizeMaxSendSizeHow this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (4 steps: Find the limit that fired; Inventory every limit in one pass; Change the limits consistently; Adjust web clients if needed). 4. Verify the fix. 5. Prevent it next time. Toolbox: Set-TransportConfig, Set-ReceiveConnector, Set-SendConnector, MaxReceiveSize, MaxSendSize.1Symptoms2Why it happens3How to fix it1Find the limit that fired2Inventory every limit in one pass3Change the limits consistently4Adjust web clients if needed4Verify the fix5Prevent it next timeTOOLBOXSet-TransportConfigSet-ReceiveConnectorSet-SendConnectorMaxReceiveSizeMaxSendSize
At a glance: how this guide is organised · 4 fix steps · 5 key tools

Symptoms#

The NDR, or the RecipientStatus of a FAIL event in message tracking, contains one of these lines:

Text
550 5.3.4 ROUTING.SizeLimit; message size exceeds fixed maximum size for route
550 5.2.3 RESOLVER.RST.RecipSizeLimit; message too large for this recipient
  • 5.3.4 ROUTING.SizeLimit points to an organization or connector limit on the route. A classic case: someone raised the organization limits, internal mail works, but external recipients bounce because the send connector is still at its 10 MB default.
  • 5.2.3 RecipSizeLimit points to the recipient's own MaxReceiveSize (a mailbox, mail user, contact or group).
  • When Exchange refuses a message during the SMTP conversation, the external sender gets an NDR written by their server, so the wording varies.
  • Outlook on the web and mobile devices can reject a large attachment before it ever reaches transport.

Why it happens#

These are the limits and their defaults, as documented by Microsoft:

WhereSettingDefault
OrganizationSet-TransportConfig -MaxReceiveSize / -MaxSendSize10 MB / 10 MB
Receive connectorsSet-ReceiveConnector -MaxMessageSize36 MB
Send connectorsSet-SendConnector -MaxMessageSize10 MB
AD site linksSet-AdSiteLink -MaxMessageSizeUnlimited
Recipients (mailboxes, mail users, contacts, groups, mail-enabled public folders)-MaxReceiveSize / -MaxSendSize on the matching Set- cmdletUnlimited
Mail flow rules-MessageSizeOver / -AttachmentSizeOverNot configured
Outlook on the web / EWS / ActiveSyncweb.config files on each Mailbox server35 MB / 64 MB / 10 MB

Five rules explain most "but I already raised it" tickets:

  1. The most restrictive limit on the path wins, and Exchange tries to reject as early as possible.
  2. Encoding adds about 33%. Base64 makes attachments bigger in transit. Microsoft's own example is a 64 MB limit that allows a message of roughly 48 MB. Exchange records the original size in the X-MS-Exchange-Organization-OriginalSize header and checks the lower of the two values.
  3. Internet mail meets both organization limits, crosswise. Inbound mail from external senders is checked against the organization MaxSendSize (plus the recipient's MaxReceiveSize). Outbound mail to external recipients is checked against the organization MaxReceiveSize (plus the sender's MaxSendSize). If you raise only one of them, nothing changes.
  4. Authenticated senders and recipients are exempt from the organization limits. Per-mailbox exceptions therefore work between internal users, but never with the internet.
  5. Mailbox limits are checked before mail flow rules, so an oversized message can bounce on the mailbox limit before your size rule (and its custom rejection text) ever sees it.

How to fix it#

1. Find the limit that fired#

PowerShell
Get-TransportService | Get-MessageTrackingLog -Sender user@contoso.com -EventId FAIL -Start (Get-Date).AddDays(-1) |
  Format-List Timestamp,ServerHostname,ConnectorId,TotalBytes,Recipients,RecipientStatus

TotalBytes is the size Exchange measured, which is larger than the attachment the user saw. Compare it with the limits below.

2. Inventory every limit in one pass#

PowerShell
Get-TransportConfig | Format-List MaxReceiveSize,MaxSendSize
Get-TransportService | ForEach-Object { Get-ReceiveConnector -Server $_.Name } | Format-Table Identity,MaxMessageSize -AutoSize
Get-SendConnector | Format-Table Name,MaxMessageSize -AutoSize
Get-AdSiteLink | Format-Table Name,MaxMessageSize -AutoSize
Get-Mailbox jsmith | Format-List MaxSendSize,MaxReceiveSize
Get-DistributionGroup -ResultSize Unlimited | Where-Object { "$($_.MaxReceiveSize)" -ne 'Unlimited' } | Format-Table Name,MaxReceiveSize
Get-TransportRule | Where-Object { $_.MessageSizeOver -or $_.AttachmentSizeOver } | Format-Table Name,MessageSizeOver,AttachmentSizeOver

3. Change the limits consistently#

Choose the largest attachment you want to allow and add about a third. For 50 MB attachments that's roughly 70 MB:

PowerShell
Set-TransportConfig -MaxReceiveSize 70MB -MaxSendSize 70MB
Get-SendConnector | Set-SendConnector -MaxMessageSize 70MB
foreach ($s in Get-TransportService) {
    Get-ReceiveConnector -Server $s.Name | Set-ReceiveConnector -MaxMessageSize 70MB
}

Microsoft recommends keeping limits the same everywhere, or deliberately tighter where mail enters the organization. Edge Transport servers apply organization limits locally, so run the same changes on each Edge server. For an internal-only exception, raise the limits on the mailboxes involved. The connectors on the path must also allow that size:

PowerShell
Set-Mailbox -Identity "Design Team" -MaxSendSize 150MB -MaxReceiveSize 150MB

Devices and apps that submit over SMTP are limited by whichever receive connector answers them. My 530 5.7.1 article shows how to find that connector.

4. Adjust web clients if needed#

The Outlook on the web, EWS and ActiveSync limits live in web.config files on every Mailbox server: the front-end proxy copies under %ExchangeInstallPath%FrontEnd\HttpProxy\ and the back-end copies under %ExchangeInstallPath%ClientAccess\. Microsoft's article Configure client-specific message size limits lists the exact keys for each protocol. These include maxAllowedContentLength (in bytes) and maxRequestLength (in KB).

Watch out: cumulative updates replace web.config files. Back them up before editing, keep a record of your changes, and re-apply them after every CU.

Verify the fix#

  • Re-run the inventory from step 2 and confirm that every server's connectors show the new value.
  • Check the value each receive connector advertises. The SIZE line in the EHLO response is the connector limit in bytes (70 MB = 73400320):
Text
telnet ex01.contoso.com 25
EHLO test.contoso.com
250-SIZE 73400320
  • Send one test internally and one to an external mailbox, each with an attachment just under your target. Good looks like DELIVER or SEND events in message tracking with the expected TotalBytes, and no new FAIL events.

Prevent it next time#

  • Keep the organization MaxSendSize and MaxReceiveSize equal, and make connectors at least as large unless you're restricting an entry point on purpose.
  • Budget a third for encoding overhead, and document every per-recipient exception, remembering that exceptions only apply internally.
  • Bigger limits mean bigger databases, backups and queues, and the remote side can still reject a message with its own NDR. Pick a size the business actually needs.

References#

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)