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-MessageTrackingLog550 5.2.3 RESOLVER.RST.RecipSizeLimit; message too large for this recipientNDR
Symptoms#
The NDR, or the RecipientStatus of a FAIL event in message tracking, contains one of these lines:
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:
| Where | Setting | Default |
|---|---|---|
| Organization | Set-TransportConfig -MaxReceiveSize / -MaxSendSize | 10 MB / 10 MB |
| Receive connectors | Set-ReceiveConnector -MaxMessageSize | 36 MB |
| Send connectors | Set-SendConnector -MaxMessageSize | 10 MB |
| AD site links | Set-AdSiteLink -MaxMessageSize | Unlimited |
| Recipients (mailboxes, mail users, contacts, groups, mail-enabled public folders) | -MaxReceiveSize / -MaxSendSize on the matching Set- cmdlet | Unlimited |
| Mail flow rules | -MessageSizeOver / -AttachmentSizeOver | Not configured |
| Outlook on the web / EWS / ActiveSync | web.config files on each Mailbox server | 35 MB / 64 MB / 10 MB |
Five rules explain most "but I already raised it" tickets:
- The most restrictive limit on the path wins, and Exchange tries to reject as early as possible.
- 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-OriginalSizeheader and checks the lower of the two values. - Internet mail meets both organization limits, crosswise. Inbound mail from external senders is checked against the organization
MaxSendSize(plus the recipient'sMaxReceiveSize). Outbound mail to external recipients is checked against the organizationMaxReceiveSize(plus the sender'sMaxSendSize). If you raise only one of them, nothing changes. - Authenticated senders and recipients are exempt from the organization limits. Per-mailbox exceptions therefore work between internal users, but never with the internet.
- 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#
Get-TransportService | Get-MessageTrackingLog -Sender user@contoso.com -EventId FAIL -Start (Get-Date).AddDays(-1) |
Format-List Timestamp,ServerHostname,ConnectorId,TotalBytes,Recipients,RecipientStatusTotalBytes 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#
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,AttachmentSizeOver3. 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:
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:
Set-Mailbox -Identity "Design Team" -MaxSendSize 150MB -MaxReceiveSize 150MBDevices 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
SIZEline in the EHLO response is the connector limit in bytes (70 MB = 73400320):
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
MaxSendSizeandMaxReceiveSizeequal, 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.

