Exchange ServerTroubleshooting

Mailbox full in Exchange Server: quotas, ProhibitSendQuota and the 554 5.2.2 NDR

Senders get 554 5.2.2 mailbox full, or a user can't send or delete? Find which quota was hit, raise it or free space, deal with Recoverable Items and verify delivery.

When an Exchange Server mailbox hits its limit, the symptoms land on other people first: senders get bounces, while the user only notices that nothing new arrives. The cause is always a quota, but there are several: database defaults, per-mailbox overrides and a separate quota for Recoverable Items. In this post I'll show how to find which one was hit, fix it properly and prove that mail flows again.

Errors this guide fixes

  • The recipient's mailbox is full and can't accept messages now.NDR (user-facing text)
  • 554 5.2.2 mailbox full; STOREDRV.Deliver.Exception:QuotaExceededException.MapiExceptionShutoffQuotaExceededNDR (diagnostic information)
  • The message store has reached its maximum sizeOutlook
How this guide is organized: 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. Verify the fix. 5. Prevent it next time. Toolbox: Set-MailboxDatabase, Get-Mailbox, Recipients › Mailboxes, Tools › Mailbox Cleanup, ProhibitSendReceiveQuota.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it nexttimeTOOLBOXSet-MailboxDatabaseGet-MailboxRecipients › MailboxesTools › Mailbox CleanupProhibitSendReceiveQuotaHow this guide is organized: 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. Verify the fix. 5. Prevent it next time. Toolbox: Set-MailboxDatabase, Get-Mailbox, Recipients › Mailboxes, Tools › Mailbox Cleanup, ProhibitSendReceiveQuota.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it next timeTOOLBOXSet-MailboxDatabaseGet-MailboxRecipients › MailboxesTools › Mailbox CleanupProhibitSendReceiveQuota
At a glance: how this guide is organized · 5 sections · 5 key tools

Symptoms#

Senders receive an NDR saying:

Text
The recipient's mailbox is full and can't accept messages now.

The diagnostic information for administrators shows the store driver's reason:

Text
554 5.2.2 mailbox full; STOREDRV.Deliver.Exception:QuotaExceededException.MapiExceptionShutoffQuotaExceeded
  • The user was warned earlier that the mailbox was almost full, then could no longer send.
  • Deleting items fails in Outlook with The message store has reached its maximum size, even though the mailbox doesn't look full. That points at the Recoverable Items folder.
  • Admins also report meeting updates failing while ordinary mail still arrives, another Recoverable Items sign.
  • Message tracking shows FAIL events with 5.2.2 in RecipientStatus.

Why it happens#

Which quota stopped the mailbox and where to raise itWhat can't the user do? if Delete items: Raise the Recoverable Items quota (It has its own quota; if a hold is filling it, don't purge it.); if Send or receive: Does the mailbox use the database quota defaults? if No: Raise the mailbox's custom values (Old, lower custom values override the database.); if Yes: Are most mailboxes on the database affected? if Yes: Raise the database defaults (Check free space on the database and log volumes, and every DAG copy, first.); if No: Override the quotas for this mailbox (Keep the warning at least half of the prohibit-send value.)What can't the user do?FIXRaise the RecoverableItems quotaIt has its own quota; if ahold is filling it, don't purgeit.Delete itemsDoes the mailbox use thedatabase quota defaults?FIXRaise the mailbox'scustom valuesOld, lower custom valuesoverride the database.NoAre most mailboxes on thedatabase affected?FIXRaise the databasedefaultsCheck free space on thedatabase and log volumes,and every DAG copy, first.YesFIXOverride the quotas forthis mailboxKeep the warning at leasthalf of the prohibit-sendvalue.NoYesSend or receiveWhich quota stopped the mailbox and where to raise itWhat can't the user do? if Delete items: Raise the Recoverable Items quota (It has its own quota; if a hold is filling it, don't purge it.); if Send or receive: Does the mailbox use the database quota defaults? if No: Raise the mailbox's custom values (Old, lower custom values override the database.); if Yes: Are most mailboxes on the database affected? if Yes: Raise the database defaults (Check free space on the database and log volumes, and every DAG copy, first.); if No: Override the quotas for this mailbox (Keep the warning at least half of the prohibit-send value.)What can't the user do?Delete itemsFIXRaise the Recoverable Items quotaIt has its own quota; if a hold is filling it, don't purge it.Send or receiveDoes the mailbox use the database quotadefaults?NoFIXRaise the mailbox's custom valuesOld, lower custom values override the database.YesAre most mailboxes on the databaseaffected?YesFIXRaise the database defaultsCheck free space on the database and logvolumes, and every DAG copy, first.NoFIXOverride the quotas for this mailboxKeep the warning at least half of theprohibit-send value.
Figure 1 · Decision tree Which quota stopped the mailbox and where to raise it. Find which limit was hit and fix it at the right level, then ask senders to resend: Exchange won't retry a 5.2.2 bounce.

Exchange applies three mailbox thresholds, set on the database and optionally overridden per mailbox:

SettingWhat happens at the limitDatabase default
IssueWarningQuotaThe user gets a warning message.1.899 GB
ProhibitSendQuotaThe user can't send new messages.2 GB
ProhibitSendReceiveQuotaNothing in or out; senders get the 5.2.2 NDR.2,469,396,480 bytes (about 2.3 GB)
RecoverableItemsWarningQuotaExchange logs an Application log event.20 GB
RecoverableItemsQuotaRecoverable Items stops accepting items, so deletes fail.30 GB

Those defaults are small, and every new database starts with them. The common causes:

  • A database was created with default limits nobody changed.
  • The mailbox has UseDatabaseQuotaDefaults set to $false with old, lower custom values.
  • Recoverable Items is full because of Litigation Hold, an In-Place Hold or single item recovery. It has its own quota and doesn't count toward the normal mailbox limits. Calendar changes are logged there too (up to CalendarLoggingQuota, 6 GB by default), so busy calendars fill it faster.
  • Steady growth with no archive or retention policy.

How to fix it#

  1. Find which limit was hit.
    PowerShell
    Get-Mailbox lina | Format-List Database, UseDatabaseQuotaDefaults, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota
    Get-MailboxDatabase DB01 | Format-List IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota, RecoverableItems*Quota
    Get-MailboxStatistics lina | Format-List TotalItemSize, TotalDeletedItemSize, ItemCount
    TotalItemSize is measured against the mailbox quotas; TotalDeletedItemSize is the Recoverable Items side.
  2. Check Recoverable Items and holds.
    PowerShell
    Get-MailboxFolderStatistics lina -FolderScope RecoverableItems |
        Format-Table Name, FolderAndSubfolderSize, ItemsInFolderAndSubfolders -AutoSize
    Get-Mailbox lina | Format-List LitigationHoldEnabled, InPlaceHolds, SingleItemRecoveryEnabled, RetainDeletedItemsFor
    If a hold is filling the folder, don't purge it: raise the Recoverable Items quota (database-wide with Set-MailboxDatabase -RecoverableItemsQuota and -RecoverableItemsWarningQuota, or on the mailbox) and agree the hold's scope with whoever owns it.
  3. Give the mailbox room now. Override the database for this mailbox, keeping the warning at least half of the prohibit-send value (otherwise the warning message isn't sent):
    PowerShell
    Set-Mailbox lina -UseDatabaseQuotaDefaults $false -IssueWarningQuota 9GB -ProhibitSendQuota 9.5GB -ProhibitSendReceiveQuota 10GB
    In the Exchange admin center: Recipients › Mailboxes, edit the mailbox, Mailbox usage, More options, then Customize the quota settings for this mailbox.
  4. Or fix the database default if most mailboxes on it are affected:
    PowerShell
    Set-MailboxDatabase DB01 -IssueWarningQuota 9GB -ProhibitSendQuota 9.5GB -ProhibitSendReceiveQuota 10GB
    IssueWarningQuota and ProhibitSendQuota must not be greater than ProhibitSendReceiveQuota. The change applies to every mailbox on the database that uses the defaults.

    Watch out: higher quotas raise the worst-case size of the database. Check free space on the database and log volumes (and on every DAG copy) before you raise a database-wide limit.

  5. Free space for the long term. Enable an archive and let a retention policy with a move-to-archive tag do the work, then run the assistant once:
    PowerShell
    Enable-Mailbox lina -Archive
    Start-ManagedFolderAssistant -Identity lina
    The user can also use File › Tools › Mailbox Cleanup in classic Outlook to find large and old items.
  6. Ask senders to resend. A 5.2.2 bounce is permanent; Exchange won't retry those messages.

Allow some time for a new limit to take effect before you retest.

Verify the fix#

  • Get-Mailbox lina | Format-List UseDatabaseQuotaDefaults, *Quota shows the values you set, and TotalItemSize is comfortably below ProhibitSendReceiveQuota.
  • Send a test from outside and check message tracking. Good looks like DELIVER rather than FAIL:
    PowerShell
    Get-MessageTrackingLog -Recipients lina@contoso.com -Start (Get-Date).AddMinutes(-30) -ResultSize Unlimited |
        Format-Table Timestamp, EventId, Source, RecipientStatus -AutoSize
  • The user can send again and delete items without the store-size error.

Prevent it next time#

  • Set realistic database quotas when you create a database, so nobody inherits the 2 GB defaults.
  • Watch out for one gotcha: setting UseDatabaseQuotaDefaults $false without values applies the mailbox's own settings, which are often Unlimited.
  • Review the largest mailboxes regularly. This parses the byte count, so sorting works in the remote shell:
    PowerShell
    Get-MailboxStatistics -Database DB01 | Select-Object DisplayName,
        @{n='SizeGB';e={[math]::Round([int64]($_.TotalItemSize.ToString() -replace '.*\((.*) bytes\).*','$1' -replace '\D','')/1GB,2)}} |
        Sort-Object SizeGB -Descending | Select-Object -First 20
  • Track Recoverable Items for mailboxes on hold, and plan disk space for holds.
  • For the cloud side of the same NDR, see Mailbox full in Exchange Online. For other bounce codes, see the Exchange Server NDR quick reference.

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

M365 Subject Matter Expert, 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)