Clutter is a new Exchange server feature that created for facilitating better and more efficient mailbox management by Exchange users.
The Clutter feature is implemented by analyzing the Exchange mailbox data and based on a “learning process” and other algorithmic decide which of the mail items is “less important.”
The Clutter mechanism will relocate this “less important” mail items into the Clutter folder. The mail items are not deleted but instead, “removed” from the inbox mail folder and by doing so, enable users to focus solely on important mail items.
A few words from a Microsoft article:
[Source of information: De-Cluttering everyone’s inbox]Last fall, we introduced Clutter, which moves less important emails out of your inbox and keeps you focused what’s most important to you. Today Clutter is moving over one million emails per day and saves users 82 minutes per month on average. Starting in June, Clutter will be on by default to help more people benefit from Clutter. We’re also introducing new administrative controls for Clutter and improving how Clutter interacts with users.
Table of content
PowerShell | Help & additional information
Running PowerShell commands in Office 365 based environment
To be able to run the PowerShell commands specified in the current article, you will need to create a remote PowerShell with Azure Active Directory or Exchange Online. In case that you need help with the process of creating a Remote PowerShell session, you can use the links on the bottom of the Article.
SECTION A: Assign (Enable) Clutter for mailbox or mailboxes
Enable clutter for a specific mailbox
PowerShell command syntax
1 | Set-Clutter -Identity -Enable $True |
PowerShell command Example
1 | Set-Clutter -Identity John@o365info.com -Enable $True |
Enable Clutter for of ALL mailboxes that dont use Clutter (Bulk mode)
PowerShell command Example
1 2 3 4 5 6 | $AllMailboxes = Get-MailBox -Filter '(RecipientTypeDetails -eq "UserMailbox")' | Where-Object {(Get-Clutter -Identity $_.UserPrincipalName).IsEnabled -eq $False} ForEach ($Mailbox in $AllMailboxes) { Set-Clutter -Identity $Mailbox.UserPrincipalName -Enable $True } |
Enable Clutter for ALL users mailboxes (Bulk mode)
PowerShell command Example
1 | Get-Mailbox -ResultSize Unlimited | Set-Clutter -Enable $True |
SECTION B: Display information about clutter settings
Display information about – clutter settings for a specific mailbox
PowerShell command syntax
1 | Get-Clutter -Identity | Select-Object IsEnabled ,MailboxIdentity |
PowerShell command Example
1 | Get-Clutter -Identity John@o365info.com | Select-Object IsEnabled ,MailboxIdentity |
Display information about – Clutter settings for a ALL mailboxes (Bulk mode)
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $Results = @() $AllMailboxes = Get-MailBox -Filter '(RecipientTypeDetails -eq "UserMailbox")' ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties } $Results | Select-Object Recipient,ClutterEnbaled |
Display information about – Mailboxes with Clutter Enabled and Mailboxes with Clutter Disabled
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $Results = @() $AllMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object {(Get-Clutter -Identity $_.alias).IsEnabled -eq $False } ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties } $Results | Select-Object Recipient,ClutterEnbaled |
Display information about – Mailboxes with Clutter Enabled and Mailboxes with Clutter Enabled
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $Results = @() $AllMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object {(Get-Clutter -Identity $_.alias).IsEnabled -eq $True } ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties } $Results | Select-Object Recipient,ClutterEnbaled |
Display information about – Clutter folder – number of items and size
PowerShell command Example
1 2 3 4 5 6 | $AllMailboxes = Get-Mailbox -ResultSize Unlimited $MailboxFolderStatisticsClutter = ForEach ($Mailbox in $AllMailboxes) { ForEach-Object {Get-MailboxFolderStatistics –Identity $Mailbox.UserPrincipalName } | Where-Object {$_.Name –Like “Clutter” } | Format-List Identity, ItemsInFolder, FolderSize } |
SECTION C: Disable mailbox Clutter
Disable Clutter for a specific mailbox
PowerShell command syntax
1 | Set-Clutter -Identity -Enable $False |
PowerShell command Example
1 | Set-Clutter -Identity John@o365info.com -Enable $False |
Disable clutter for ALL users mailboxes (Bulk mode)
PowerShell command Example
1 | Get-Mailbox -ResultSize Unlimited | Set-Clutter -Enable $False |
SECTION D: Export information about Clutter settings
Export information about – Clutter settings for a specific mailbox to CSV file
PowerShell command Example
1 | Get-Clutter -Identity John@o365info.com | Export-CSV C:\TEMP\"John Cluter settings.CSV" –NoTypeInformation -Encoding utf8 |
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $Results = @() $AllMailboxes = Get-MailBox -Filter '(RecipientTypeDetails -eq "UserMailbox")' ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties $ExportData = $Results } $Results | Select-Object Recipient,ClutterEnbaled $ExportData | Export-CSV C:\TEMP\"Cluter settings ALL mailboxes.CSV" –NoTypeInformation -Encoding utf8 |
Export information about – Mailboxes with Clutter Disabled to CSV file
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Results = @() $AllMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object {(Get-Clutter -Identity $_.alias).IsEnabled -eq $False } ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties $ExportData = $Results } $Results | Select-Object Recipient,ClutterEnbaled $ExportData | Export-CSV C:\TEMP"ALL mailboxes - Clutter Disabled.CSV" –NoTypeInformation -Encoding utf8 |
Export information about – Mailboxes with Clutter Enabled to CSV file
PowerShell command Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Results = @() $AllMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object {(Get-Clutter -Identity $_.alias).IsEnabled -eq $True } ForEach ($Mailbox in $AllMailboxes) { $ClutterStatus = Get-Clutter -Identity $Mailbox.UserPrincipalName | Select-Object -ExpandProperty isEnabled $mailboxID = $Mailbox.UserPrincipalName $Properties = @{ ClutterEnbaled = $ClutterStatus Recipient = $mailboxID } $Results += New-Object psobject -Property $properties $ExportData = $Results } $Results | Select-Object Recipient,ClutterEnbaled $ExportData | Export-CSV C:\TEMP\"ALL mailboxes - Clutter Enabled.CSV" –NoTypeInformation -Encoding utf8 |
Export information about – Clutter folder – number of items and size
PowerShell command Example
1 2 3 4 5 6 7 8 | $AllMailboxes = Get-Mailbox -ResultSize Unlimited $MailboxFolderStatisticsClutter = ForEach ($Mailbox in $AllMailboxes) { ForEach-Object {Get-MailboxFolderStatistics –Identity $Mailbox.UserPrincipalName } | Where-Object {$_.Name –Like “Clutter” } | Format-List Identity, ItemsInFolder, FolderSize } $MailboxFolderStatisticsClutter | Export-CSV C:\TEMP\"Clutter Folder - Number of mail items and size.CSV" –NoTypeInformation -Encoding utf8 |
SECTION E: Using Exchange Online rule to bypass clutter
Using Exchange Online rule to bypass clutter
When using clutter option, the Exchange server who manages the user mailbox, “decide” according to an internal algorithm to “move” (or not to “move”) a specific E-mail message to the clutter folder.
In some scenarios, the clutter algorithm can decide to classify E-mail messages as an E-mail that will be sent to the clutter folder, and we would like to override this decision.
To be able to “inform” Exchange server that we would like to prevent that clutter process for specific mail items, we can create an Exchange Online rule.
The Exchange rule is implemented by, defining the characters of this specific emails, and asks from Exchange to add a specific mail field to the E-mail message header.
This special mail filed is named – X-MS-Exchange-Organization-BypassClutter.
We will need to add this mail field, and set the value of this mail field to “true”
For example
X-MS-Exchange-Organization-BypassClutter = true
In case that Exchange server “locate” this mail field, he “understands” that he needs to Bypass the clutter process.
The Exchange rule can be created manually or via PowerShell.
In the following section, we review two examples of such as Exchange rule that will bypass the clutter of specific mail items.
Create Exchange rule that will bypass the clutter for E-mail that include a specific text in the mail SUBJECT
PowerShell command syntax
1 | New-TransportRule -Name <Name of the rule> -SubjectContainsWords "<Text String>" -SetHeaderName "X-MS-Exchange-Organization-BypassClutter" -SetHeaderValue "true" |
PowerShell command Example
1 2 | New-TransportRule -Name “Bypass Clutter – Subject important” -SubjectContainsWords " important " -SetHeaderName "X-MS-Exchange-Organization-BypassClutter" -SetHeaderValue "true" |
Create Exchange rule that will bypass clutter for E-mail that sent from a specific SENDER
PowerShell command syntax
1 | New-TransportRule -Name <Name of the rule> -From "<E-mail address>" -SetHeaderName "X-MS-Exchange-Organization-BypassClutter" -SetHeaderValue "true" |
PowerShell command Example
1 | New-TransportRule -Name “Bypass Clutter – E-mail from Bob” -From Bob@o365info.com -SetHeaderName "X-MS-Exchange-Organization-BypassClutter" -SetHeaderValue "true" |
Additional reading
- Exchange Online: How to Disable Clutter For All Mailboxes
- Focused Inbox—focus on the emails that matter most
- FAQ: Answers to common Office 365 Clutter questions
- Use Clutter to sort low-priority messages in Outlook
- How to disable “clutter” feature in office 365
Using the option of Clutter
- Use Clutter to sort low priority messages in Outlook
- De-Cluttering everyone’s inbox
- Clutter notifications in Outlook
- Making Clutter in Office 365 even better
- Use a transport rule so messages can bypass Clutter
Clutter scripts
- Clutter Status script
- Disable Clutter for All Mailboxes in Exchange Online
- Export all Office 365 users Clutter status to a CSV file
Manage the Clutter options
Manage Clutter options using PowerShell
- Exchange Online Clutter
- Enable or Disable Clutter for Office 365 User Mailboxes
- Clutter evolves to become more useful – but still only for Office 365
Video clip
Getting started with Office 365 PowerShell
Get more information about the Naming Conventions that are used in the PowerShell articles – Help and additional information – o365info.com PowerShell articles
To get more information about the required remote PowerShell commands that you need to use for connecting to Exchange Online, read the following article:
Connect to Exchange Online by using Remote PowerShell
To get more information about the required software component + the remote PowerShell commands that you need to use for connecting Azure Active Directory, read the following article: Part 2: Connect to Office 365 by using Remote PowerShell
If you are new in the PowerShell world, you can read more information about how to start working with PowerShell in Office 365 based environment in the following article series: Getting started with Office 365 PowerShell – Part 1, Part 2, Part 3.
In case that you need more information about how to use the o365info PowerShell scripts that I add to the PowerShell articles, you can read the article – How to run and use o365info PowerShell menu script
It is important for us to know your opinion on this article


Thank you Eyal!!! The PS menu script you wrote is perfect, and solved a number of my issues.
Hello Eyal,
i have a specific requirement, i have few commands, that i have put together but i am not seeing the desired results. i am no genius when writing a script. it would be great if you can help me with this.
i get the output of this,
[String]$ExclusionGroupDN = (Get-DistributionGroup “Test Distribution list”).DistinguishedName
Get-DistributionGroupMember $ExclusionGroupDN
$ClutterDis = Get-Mailbox -Filter {MemberOfGroup -NotLike $ExclusionGroupDN } -ResultSize Unlimited | Where {$_.WhenCreated -gt(get-date).AddDays(-7)}.
but when i add
$ClutterDis=Get-Mailbox -ResultSize unlimited | Where-Object {$_.WhenCreated –gt ((Get-Date).Adddays(-7))} | Where-Object {(Get-Clutter -Identity $_.alias).IsEnabled -eq $True}
thats when things dont work as they are expected. can this be modified to show only the items that have clutter enabled and are not a part of the distribution list that i am going to specify?