我的 Outlook 郵件規則一共有 155 個,多到我幾乎不會去人工檢視這些規則是否還合理,也無法一一開啟檢視,因為透過 Outlook 來管理這些郵件規則實在太沒效率了。前幾天發現,我有幾封郵件怎樣都收不到,也沒在垃圾郵件夾,這才想起我可能之前有設定過郵件規則,不知道分類到哪裡去了,這才讓我起心動念,設法用 PowerShell 來找出我想要的規則集。這篇文章我就來分享幾個好用的 PowerShell 指令。

登入 Exchange Online
$UserEmail = "user@example.com"
$Credential = Get-Credential -Message "AzureAD Login" -UserName $UserEmail
Connect-ExchangeOnline -UserPrincipalName $UserEmail -ShowProgress $true -Credential $Credential
常用的郵件規則指令整理
我透過以下幾個命令,搭配 CSV 匯出與 Excel 批次整理現有的郵件規則,一下子就整理好我所有的郵件規則!
- 
取得所有郵件規則清單 Get-InboxRule
 我在執行這個 Cmdlet 的規則集中,剛好出現了一個有問題的規則,稍後會介紹刪除郵件規則的方法:  
 顯示特定幾個重要欄位 $MyInboxRules = Get-InboxRule
$MyInboxRules | select Name,Enabled,Priority,MoveToFolder,From,SentTo| ft
 
- 
快速搜尋出有問題的郵件規則 如果要快速找出一個規則,可以直接傳入規則名稱,非常簡單: Get-InboxRule "518人力銀行"
 如果要透過「關鍵字」快速找出所有相關的郵件規則,可以這樣寫: Get-InboxRule | where {$_.Name -like '`[不重要`] *'}
 
- 
刪除郵件規則 刪除郵件規則最簡單的寫法是這樣: Remove-InboxRule "518人力銀行"
  
 如果要刪除多組郵件規則 Get-InboxRule | where {$_.Name -like '*104*'} | Remove-InboxRule -Confirm:$false
  
 
- 
停用/啟用郵件規則 Disable-InboxRule "[電子報] Costco Taiwan"
 Enable-InboxRule "[電子報] Costco Taiwan"
 
- 
匯出所有郵件規則 匯出 CSV 格式: Get-InboxRule |
Export-Csv -Path 'G:\MyInboxRules.csv' -NoTypeInformation -Encoding utf8
 匯出 Excel 格式: Get-InboxRule |
Export-Excel -Path 'G:\MyInboxRules.xlsx' -AutoSize -AutoFilter -Show
 
你必須先安裝好用的 ImportExcel 模組,才能使用 Export-Excelcmdlet 喔!
 
 
- 
調整郵件規則優先權 以下範例是將該郵件規則的優先權設定為 10:
 Set-InboxRule '不太重要的郵件自動分類' -Priority 10
 如果已經有個優先權為 10的郵件規則,原本的郵件規則的優先權編號會自動往前修正1號,但如果無法往前修正的話 (例如1~9都有規則在用了),這個規則就會新增為11優先權,而原本的11就會變12,依此類推!
 
如果想將郵件規則調整為「最高優先權」的話,可以指定編號為 0,當你設定為0的話,最後還是會重新編號為1,所有的優先權編號都是從1開始計算的,其他規則就會全部向後加1!
 
 
- 
將郵件規則更名 Set-InboxRule 'Costco Taiwan' -Name '[電子報] Costco Taiwan'
 改名時順便調整規則優先權 Set-InboxRule 'Costco Taiwan' -Name '[電子報] Costco Taiwan' -Priority 999
 
- 
重新排序郵件規則優先權 依照 From寄件者信箱進行排序這些郵件規則
 Get-InboxRule | where {$_.Name -like '`[不重要`] *'} | Sort-Object -Property From | foreach {
  echo "$($_.Name): Set-InboxRule $($_.Identity) -Priority 999"
  Set-InboxRule $($_.Identity) -Priority 999
}
 
建立郵件規則
由於郵件規則可以設定的相當複雜,所以建立郵件規則的參數超級多,我這裡就整理我常用的幾個規則就好:
- 
將特定「寄件者」送入特定郵件資料夾,優先權設定為 999,並且停止處理其他規則
 我個人每天會收到數百封郵件,不靠郵件規則我根本就不用做事了。所以我會把一些不太重要的郵件先移到一個名為 !! 不重要的郵件資料夾中,等有空的時候才會去翻來看。不過,我這個習慣用了很多年了,目前累積未看的郵件大概有68,953封信,我覺得這樣很好!😆
 New-InboxRule `
  -Name '[不重要] 兩廳院代售票券節目電子報快訊' `
  -From 'customerservice@mail.npac-ntch.org' `
  -MoveToFolder ':\收件匣\!! 不重要' `
  -MarkImportance "Low" `
  -Priority 999 `
  -StopProcessingRules:$true
 
如果不指定 -Priority的話,預設值為1(最高優先權)
 
 這裡的 -MoveToFolder要使用MailboxID:\ParentFolder\SubFolder這種格式!你可以透過以下命令查出所有可用的資料夾名稱:
 Get-MailboxFolder -Identity :\收件匣 -Recurse | select Identity
 
- 
將「我」出現在 To欄位的郵件都標示為重要郵件
 由於這條規則可能會跟我的 [不重要]郵件相衝突,所以我要把郵件規則的優先權設定的高一些,並且刻意不加上-StopProcessingRules:$true參數,好讓後面的郵件規則可以繼續判斷!
 New-InboxRule `
  -Name '[重要] 有我在 To 欄位的郵件' `
  -MyNameInToBox $true `
  -MarkImportance High `
  -Priority 0
 New-InboxRule `
  -Name '[重要] 只寄給我的郵件' `
  -SentOnlyToMe $true `
  -MarkImportance High `
  -Priority 0
 
注意: 只要你使用了 -MarkImportance參數設定規則,該規則就會從 Outlook 中消失,這個問題應該是個 Bug,等微軟修復!
 
 
每個郵件規則物件的屬性
以下我列出特定一條 InboxRule 的所有屬性清單,方便撰寫腳本時查閱:
Get-InboxRule 5044794974520999938 | fl
Description                           : If the message:
                                                the message was received from 'MMA@mx1.edm.sinopac.com'
                                        Take the following actions:
                                                move the message to folder 'Sino 永豐銀行'
                                                and stop processing more rules on this message
Enabled                               : True
Identity                              : will\5044794974520999938
InError                               : False
ErrorType                             : None
Name                                  : [銀行] MMA@mx1.edm.sinopac.com
Priority                              : 14
RuleIdentity                          : 5044794974520999938
SupportedByTask                       : True
Legacy                                :
BodyContainsWords                     : {}
ExceptIfBodyContainsWords             : {}
FlaggedForAction                      :
ExceptIfFlaggedForAction              :
FromAddressContainsWords              : {}
ExceptIfFromAddressContainsWords      : {}
From                                  : {"MMA@mx1.edm.sinopac.com" [SMTP:MMA@mx1.edm.sinopac.com]}
ExceptIfFrom                          :
HasAttachment                         : False
ExceptIfHasAttachment                 : False
HasClassification                     :
ExceptIfHasClassification             :
HeaderContainsWords                   : {}
ExceptIfHeaderContainsWords           : {}
MessageTypeMatches                    :
ExceptIfMessageTypeMatches            :
MyNameInCcBox                         : False
ExceptIfMyNameInCcBox                 : False
MyNameInToBox                         : False
ExceptIfMyNameInToBox                 : False
MyNameInToOrCcBox                     : False
ExceptIfMyNameInToOrCcBox             : False
MyNameNotInToBox                      : False
ExceptIfMyNameNotInToBox              : False
ReceivedAfterDate                     :
ExceptIfReceivedAfterDate             :
ReceivedBeforeDate                    :
ExceptIfReceivedBeforeDate            :
RecipientAddressContainsWords         : {}
ExceptIfRecipientAddressContainsWords : {}
SentOnlyToMe                          : False
ExceptIfSentOnlyToMe                  : False
SentTo                                :
ExceptIfSentTo                        :
SubjectContainsWords                  : {}
ExceptIfSubjectContainsWords          : {}
SubjectOrBodyContainsWords            : {}
ExceptIfSubjectOrBodyContainsWords    : {}
WithImportance                        :
ExceptIfWithImportance                :
WithinSizeRangeMaximum                :
ExceptIfWithinSizeRangeMaximum        :
WithinSizeRangeMinimum                :
ExceptIfWithinSizeRangeMinimum        :
WithSensitivity                       :
ExceptIfWithSensitivity               :
ApplyCategory                         : {}
ApplySystemCategory                   : {}
CopyToFolder                          :
DeleteMessage                         : False
DeleteSystemCategory                  : {}
ForwardAsAttachmentTo                 :
ForwardTo                             :
MarkAsRead                            : False
MarkImportance                        :
MoveToFolder                          : Sino 永豐銀行
PinMessage                            : False
RedirectTo                            :
SendTextMessageNotificationTo         : {}
SoftDeleteMessage                     : False
StopProcessingRules                   : True
MailboxOwnerId                        : will
IsValid                               : True
ObjectState                           : Unchanged
相關連結