Unable to Delete Items from Mailbox Due to Discovery Holds in Exchange Online – Complete Fix

📄 Article

Unable to Delete Items from Mailbox Due to Discovery Holds in Exchange Online – Complete Fix

In Exchange Online, administrators often face issues where users cannot delete emails from both the primary mailbox and archive mailbox — even after cleanup attempts. This typically happens in environments where retention or legal hold policies are enforced through Microsoft Purview.

Even after disabling mailbox-level features, data may still be preserved due to higher-priority compliance policies.

🔍 The Symptoms / Error Message

⚠️ What You May Experience

  • Users cannot permanently delete emails
  • Purges folder keeps increasing in size
  • Mailbox size does not reduce despite cleanup attempts
  • Same issue seen in both primary and archive mailbox

🧠 Root Cause

💡 Why This Happens

This issue occurs because one or more of the following holds are active:

  • Litigation Hold
  • eDiscovery (In-Place Hold – legacy)
  • Microsoft Purview Retention Policies
  • Organisation-wide retention or discovery holds
  • Retention configured with “retain forever / never delete”

⚠️ Important

Even if you disable Single Item Recovery or remove retention policies at mailbox level, Purview retention overrides everything. Always validate Purview policies first.

🛠️ Step-by-Step Resolution

1

Check Mailbox Size and Recoverable Items

Connect to Exchange Online and inspect the mailbox and archive sizes, then check the Purges folder specifically.

PowerShell — Exchange Online

Connect-ExchangeOnline

# Primary mailbox size
Get-MailboxStatistics user@yourdomain.com | Select DisplayName,TotalItemSize,TotalDeletedItemSize

# Archive mailbox size
Get-MailboxStatistics user@yourdomain.com -Archive | Select DisplayName,TotalItemSize,TotalDeletedItemSize

# Purges folder - primary
Get-MailboxFolderStatistics user@yourdomain.com -FolderScope RecoverableItems | Where-Object {$_.Name -eq "Purges"} | Select Name,FolderPath,ItemsInFolder,FolderSize

# Purges folder - archive
Get-MailboxFolderStatistics user@yourdomain.com -Archive -FolderScope RecoverableItems | Where-Object {$_.Name -eq "Purges"} | Select Name,FolderPath,ItemsInFolder,FolderSize
2

Check Mailbox Hold Status

Identify all active holds on the mailbox including litigation hold, in-place holds, and delay holds.

PowerShell — Exchange Online

Get-Mailbox user@yourdomain.com | Select DisplayName,LitigationHoldEnabled,LitigationHoldDuration,InPlaceHolds,RetentionHoldEnabled,SingleItemRecoveryEnabled,DelayHoldApplied,DelayReleaseHoldApplied

Get-OrganizationConfig | Select InPlaceHolds
3

Disable Single Item Recovery (if needed)

If Single Item Recovery is enabled and not required, disable it on the mailbox.

PowerShell — Exchange Online

Set-Mailbox user@yourdomain.com -SingleItemRecoveryEnabled $false

⚠️ Note

This alone will not clear the Purges folder if a Purview retention policy is still active. Proceed to Step 4.

4

Identify Microsoft Purview Retention Policies

Connect to Security & Compliance PowerShell and identify which retention policies are applied and their rules.

PowerShell — Security & Compliance

Connect-IPPSSession

# List all retention policies
Get-RetentionCompliancePolicy | Select Name,Enabled

# Check Exchange locations per policy
Get-RetentionCompliancePolicy | Format-List Name,ExchangeLocation,Guid

# Check retention rules
Get-RetentionComplianceRule | Select Name,Policy,RetentionDuration,RetentionAction

# Check which policy includes the mailbox
Get-RetentionCompliancePolicy -Identity "PolicyName" | Format-List Name,ExchangeLocation
5

Remove or Exclude Mailbox from Policy

Either remove the mailbox entirely from the policy, or add it as an exception — the recommended approach.

✅ Two Options Available

  • Option A — Remove mailbox completely from the policy
  • Option B (Recommended) — Add mailbox as an exception, preserving the policy for all other users
PowerShell — Security & Compliance

# Option A - Remove mailbox completely
Set-RetentionCompliancePolicy "PolicyName" -RemoveExchangeLocation user@yourdomain.com

# Option B - Add as exception (Recommended)
Set-RetentionCompliancePolicy "PolicyName" -AddExchangeLocationException user@yourdomain.com

# Verify the exception was applied
Get-RetentionCompliancePolicy -Identity "PolicyName" | Format-List Name,ExchangeLocationException
6

Validate Hold Removal

Confirm the hold has been removed and check the mailbox retention settings.

PowerShell — Security & Compliance

# Validate distribution status and hold state
Get-RetentionCompliancePolicy -Identity "PolicyName" | Format-List DistributionStatus,*Hold*

# Confirm mailbox retention settings
Get-Mailbox user@yourdomain.com | Format-List RetainDeletedItemsFor
7

Wait for Policy Propagation

Changes do not apply instantly — Microsoft Purview needs time to update across workloads.

✅ Once Propagation Completes

  • The Purges folder will start clearing automatically
  • Mailbox size will begin to reduce
  • Users will be able to permanently delete emails

💡 Best Practices & Recommendations

  • Avoid using “never delete” retention policies unless legally required
  • Use policy exceptions instead of removing policies globally to protect other users
  • Always validate Purview policies first before making mailbox-level changes
  • Monitor Recoverable Items regularly in high-compliance environments

✅ Final Insight

If users cannot delete emails, always assume Purview retention is the real blocker. Mailbox-level changes (SingleItemRecovery, quotas, etc.) will not work until the mailbox is removed or excluded from the retention policy. This is especially common in tightly controlled environments where compliance policies are enforced for legal discovery or investigation purposes.

📚 References & Further Reading

Leave a Comment

Your email address will not be published. Required fields are marked *