O365 Exchange online archive and retention policy

Nandan NK 50 Reputation points
2025-08-06T13:28:45.02+00:00

I have an Exchange Online mailbox that's nearly full (99.99 GB). The Online Archive with Auto-Expansion is enabled.

About 7 days ago, I applied a retention policy to move emails older than 30 days to the archive. The mailbox contains data from the past 4–5 years.

However:

Emails older than 30 days are still in the primary mailbox.

There's no change in the size of the primary or archive mailbox.

Auto-expansion hasn't triggered.

Emails are not being moved to the archive as expected.

I’ve already:

  • Run Start-ManagedFolderAssistant

Removed any organization hold

Checked multiple resources, but nothing helped.

Can someone help me understand what's going wrong and how to resolve this??

Exchange Online
Exchange Online
A Microsoft email and calendaring hosted service.
0 comments No comments
{count} votes

2 answers

Sort by: Most helpful
  1. Andy David - MVP 158.4K Reputation points MVP Volunteer Moderator
    2025-08-06T13:49:58.9166667+00:00
    0 comments No comments

  2. Hin-V 2,075 Reputation points Microsoft External Staff Moderator
    2025-08-06T14:54:32.4+00:00

    Hi @Nandan NK

    Thank you for posting your question in Microsoft Q&A. 

    We understand that your retention policy is not working as expected. This issue may be caused by a misconfiguration during setup. 

    You could follow steps by steps to troubleshoot it: 

    Verify the Retention Policy is Applied Correctly

    Run:

    Get-Mailbox "[******@domain.com](mailto:******@domain.com"mailto:******@domain.com")" | Select RetentionPolicy  
    

    Ensure it matches your intended policy (e.g., the one with a 30-day "Move to Archive" tag as default for the whole mailbox). 

    If not applied, assign it:

    Set-Mailbox "[******@domain.com](mailto:******@domain.com"mailto:******@domain.com")" -RetentionPolicy "YourPolicyName". 
    

    Check policy details:

    Get-RetentionPolicy "YourPolicyName" | Select *.  
    
    

    Confirm it includes a tag with RetentionAction: MoveToArchive and AgeLimitForRetention: 30.00:00:00 (for 30 days). 

    Check and Disable Any Holds

    Run:

    Get-Mailbox "[******@domain.com](mailto:******@domain.com"mailto:******@domain.com")" | Select 
    

    Look for RetentionHoldEnabled: True, LitigationHoldEnabled: True, InPlaceHolds, or DelayHoldApplied: True. If any are enabled, they block archiving. 

    Disable retention hold:

    Set-Mailbox "[******@domain.com](mailto:******@domain.com"mailto:******@domain.com")" -RetentionHoldEnabled $false. 
    

    For litigation or delay holds, disable if not needed:

    Set-Mailbox "[******@domain.com]" -LitigationHoldEnabled $false (but consult legal/compliance first). 

    Check all mailboxes for holds:

    Get-Mailbox -ResultSize Unlimited | Where-Object {$_.RetentionHoldEnabled -eq $true} | Select Name, RetentionPolicy, RetentionHoldEnabled. 
    
    

    For eDiscovery holds, use the Microsoft Purview compliance portal to review and remove cases affecting the mailbox. 

    Check for User-Applied Personal Retention Tags

    Run:

    Get-MailboxFolderStatistics -Identity "[******@domain.com](mailto:******@domain.com"mailto:******@domain.com")" | Where {$_.ArchivePolicy} | Select Identity, ArchivePolicy, FolderSize, ItemsInFolder  
    
    

    This shows if personal tags are overriding the policy on specific folders. If found, instruct the user to remove them via Outlook (right-click folder > Properties > Policy tab). 

    Force the Managed Folder Assistant and Monitor Progress

    Run:

    Start-ManagedFolderAssistant -Identity "
    
    

    Wait 24-48 hours, as changes aren't immediate for large mailboxes. 

    Monitor sizes:

    Get-MailboxStatistics "
    

    For ongoing monitoring, use this loop in PowerShell:

    do {
        $Primary = Get-EXOMailboxStatistics -Identity "******@domain.com"
        $Archive = Get-EXOMailboxStatistics -Identity "******@domain.com" -Archive
        [PSCustomObject]@{
            PrimarySize = $Primary.TotalItemSize
            ArchiveSize = $Archive.TotalItemSize
            PrimaryItems = $Primary.ItemCount
            ArchiveItems = $Archive.ItemCount
        }
        Start-Sleep -Seconds 120  # Check every 2 minutes
    } while ($true)
    

    Look for gradual increases in archive item count/size. 

    Verify Old Items Exist and Qualify

    Run:

    Get-MailboxFolderStatistics -Identity "
    

    Confirm there are items older than 30 days based on received date (the policy uses this, not creation date). 

    I'm looking forward to your response. Any update would be appreciated. I'm here to help.


    If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".      

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.