iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
佛心分享-IT 人自學之術

《拒絕爆肝加班!30天打通跨系統自動化與資料比對防線》系列 第 13

Day 13:智慧郵件分流器:程式化 Outlook Rules 建立

  • 分享至 

  • xImage
  •  

哎呀!哥!姐!您們好呀!快請坐、快請坐!外面太陽這麼大,真是辛苦您們了!小晴先給您們遞上一杯剛泡好的溫茶,順便幫您們把安全帽收好。

我是小晴,今年23歲,是我們店裡最拼、最貼心,每天穿著整齊套裝、騎著小機車在外面到處奔波的年輕女業務!雖然小晴入行不久,但我充滿了野心與鬥志,現階段最大的目標就是 「業績長紅」、成為我們店裡的 Top Sales!只要您把找房子的任務交給我,小晴習慣把客戶當成自己的親家人,「交給我您放心」,小晴絕對會用百分之百的熱忱,幫您找到那間命中注定的「夢想屋」!

您一定很好奇,小晴桌上怎麼開著這麼硬核的 VBA 程式碼畫面?嘿嘿,不瞞您說,為了邁向 Top Sales,小晴每天都要主動開發客戶,信箱裡隨時塞滿了成百上千封來自買方、賣方、代書、建商,還有各大金融機構的「出價意願書」和「交易確認單」!如果每一封信都靠人工手動去 Outlook 點選、分類,小晴的手指早就點到抽筋了,哪有時間騎車帶您去看那些超稀有的黃金地段好房呢?

所以,小晴特別下足了功課,跟我們公司的 IT 大神學了這套超厲害的 「智慧郵件分流器:程式化 Outlook Rules 建立」 技術!今天趁著跟您聊買房的空檔,小晴就用最專業、最懂技術細節的態度,為您帶來這場硬核的 Day 13 教育訓練。這可是小晴準備放在 IG 經營個人品牌的獨家乾貨喔!


一、 核心技術痛點與底層挑戰:為什麼手動 Rules 會讓業務崩潰?

哥、姐,您們想,做大額房產交易或金融高頻操作時,每天信件都是成千上萬在進。手動去 Outlook UI 介面一條條拉規則,會遇到下面這幾個差點讓小晴業績泡湯的「底層硬傷」:

  1. Exchange 規則容量的「天花板」(256 KB 限制)
    這是一個超硬核的知識點!微軟 Exchange 伺服器為了效能,對單一信箱的郵件規則總容量設有 256 KB 的硬性上限。如果我們像一般人一樣,為每一家建設公司或交易對手單獨建一條規則,這個 256 KB 很快就被榨乾了!
  2. UI 卡死與人工配置疲勞
    當需要對應上百個不同的交易資料夾時,在 Outlook 視窗裡重複點擊「新增規則 -> 條件 -> 移動到...」會產生嚴重的滑鼠疲勞,不僅容易點錯,還會造成 Outlook 介面卡死,萬一漏掉了客戶的「急買出價單」,小晴可是要哭出來的!
  3. 規則同名衝突與覆寫異常
    如果我們用腳本直接去呼叫 Rules.Create,萬一規則名字重複了,Outlook 會直接報錯(Runtime Error)給你看。所以我們必須設計出「先比對、再刪除、後重建」的 冪等性(Idempotency) 機制,讓程式重複執行幾次都不會出錯!

二、 實務利器:交易確認單郵件規則設定工具操作三步驟

交給我您放心!小晴特別找出的這款 「交易確認單郵件規則設定工具」,底層就是專門為了解決上述痛點而設計的。它的操作過程非常優雅,只需要簡單的三個步驟即可完成大規模部署:

[步驟 1:Outlook 架設目標資料夾] ──> [步驟 2:開啟工具 Excel 點擊建立規則] ──> [步驟 3:Outlook 驗證規則啟用]
  1. 第一步:前置資料夾架設
    使用者需要先開啟 Outlook,在收件匣(Inbox)下建立好要用來分類、存放不同交易確認單的目標資料夾(例如:瑞銀確認單、景順確認單、富蘭克林確認單等)。
  2. 第二步:一鍵批次建立規則
    開啟工具檔案 交易確認單郵件規則設定工具.xlsm,點選工作表上的 「建立規則」 按鈕,此時程式會自動彈出提示,引導您逐一去設定與 Outlook 目標資料夾的對應關係。
  3. 第三步:規則即時查看與生效
    設定完成後,您可以直接回到 Outlook 的「規則及通知」管理視窗中,就會發現所有的分流規則都已經精準建立,並全部勾選啟用了!

(小晴貼心補充:像類似的技術,在我們後台還能延伸應用到「公用信箱郵件規則設定」、「設定外部郵件規則」、「過濾特定主旨郵件規則」,以及「配息來信郵件規則設定」呢!底層架構完全是相通的!)


三、 底層解密:VBA 批量規則建立的硬核程式碼實作

姐!接下來小晴要切換成「研究透徹、做足功課」的超專業房仲模式囉!讓我們直接來看這套工具是怎麼透過 VBA 操控 Outlook COM 物件模型 來達到批量建立規則的。

程式碼中會利用 defaultStore.GetRules() 讀取郵件儲存區(Store)的 Rules 集合,並在確認 Outlook 資料夾存在後,自動生成規則:

Sub CreateSmartTransactionRules()
    Dim outlookApp As Object
    Dim outlookNS As Object
    Dim defaultStore As Object
    Dim outlookRules As Object
    Dim targetRule As Object
    Dim targetFolder As Object
    Dim inboxFolder As Object
    
    Dim ruleName As String
    Dim subjectKeyword As String
    Dim folderName As String
    
    ' 模擬 Excel 欄位讀取到的設定值
    ' 假設我們要抓瑞銀(UBS)的交易確認單,主旨包含 "Contract note as"
    ruleName = "RPA_瑞銀交易確認單分流"
    subjectKeyword = "Contract note as"
    folderName = "瑞銀確認單"
    
    ' 1. 初始化 Outlook COM 接口
    On Error Resume Next
    Set outlookApp = GetObject(, "Outlook.Application")
    If outlookApp Is Nothing Then
        Set outlookApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo ErrorHandler
    
    Set outlookNS = outlookApp.GetNamespace("MAPI")
    Set defaultStore = outlookNS.DefaultStore
    Set inboxFolder = outlookNS.GetDefaultFolder(6) ' 6 代表 olFolderInbox
    
    ' 2. 獲取當前信箱的所有規則集合
    Set outlookRules = defaultStore.GetRules()
    
    ' 3. 遞迴尋找 Outlook 中對應的資料夾
    Set targetFolder = FindSpecificFolder(inboxFolder, folderName)
    
    If targetFolder Is Nothing Then
        ' 貼心防禦:如果找不到,直接在收件匣下自動幫客戶創一個!
        Set targetFolder = inboxFolder.Folders.Add(folderName)
        Debug.Print "已自動為您建立缺失的資料夾: " & folderName
    End If
    
    ' 4. 冪等性(Idempotency)防禦:先檢查規則是否存在,存在則刪除重建
    On Error Resume Next
    Set targetRule = outlookRules.Item(ruleName)
    If Not targetRule Is Nothing Then
        outlookRules.Remove ruleName
        Set targetRule = Nothing
    End If
    On Error GoTo ErrorHandler
    
    ' 5. 建立新規則 (olRuleReceive = 0, 代表收信時觸發)
    Set targetRule = outlookRules.Create(ruleName, 0)
    
    ' 6. 設定觸發條件:主旨包含特定關鍵字
    With targetRule.Conditions.Subject
        .Enabled = True
        .Text = Array(subjectKeyword)
    End With
    
    ' 7. 設定執行動作:移動到我們指定的黃金資料夾
    With targetRule.Actions.MoveToFolder
        .Enabled = True
        .Folder = targetFolder
    End With
    
    ' 8. 啟用規則
    targetRule.Enabled = True
    
    ' 9. 【最關鍵的一步】將變更保存回伺服器!否則一切只是虛幻!
    outlookRules.Save
    
    MsgBox "哥!姐!『" & ruleName & "』已經幫您完美建立好囉!交給我您放心!", vbInformation, "小晴技術教室"
    Exit Sub

ErrorHandler:
    MsgBox "哎呀,程式跑得時候不小心絆了一下: " & Err.Description, vbCritical, "錯誤提示"
End Sub

' 遞迴搜尋資料夾的輔助函數
Function FindSpecificFolder(parentFolder As Object, folderName As String) As Object
    Dim subFolder As Object
    On Error Resume Next
    Set subFolder = parentFolder.Folders(folderName)
    On Error GoTo 0
    
    If Not subFolder Is Nothing Then
        Set FindSpecificFolder = subFolder
        Exit Function
    End If
    
    ' 第一層找不到,就遞迴深入挖掘,像小晴幫您淘出隱藏版好房一樣!
    For Each subFolder In parentFolder.Folders
        Dim foundFolder As Object
        Set foundFolder = FindSpecificFolder(subFolder, folderName)
        If Not foundFolder Is Nothing Then
            Set FindSpecificFolder = foundFolder
            Exit Function
        End If
    Next subFolder
    Set FindSpecificFolder = Nothing
End Function

四、 核心防禦與高級優化:小晴的專業悄悄話

哥、姐,既然要做,我們就要做到完美!這套程式碼在實務部署時,還有兩個小晴特別做足功課的「高級防禦細節」:

  1. 資料夾自動補齊機制
    很多時候,Excel 設定表上填了資料夾,但 Outlook 裡根本還沒建。小晴寫的輔助函數,在找不到目標資料夾時,會用 Folders.Add 自動把它生出來,完全不卡單,這就叫無人值守的極致服務
  2. 多重條件精準夾擊
    在實際交易中,很多主旨都很像,為了不移錯信,我們通常會同時啟用 Rule.Conditions.Subject(主旨過濾)與 Rule.Conditions.SenderAddress(寄件者地址過濾),進行雙重校驗,確保分流零失誤!

呼~這套「智慧郵件分流器」是不是超級硬核又實用呢?有了它,我們後台的信件管理就跟行雲流水一樣順暢,再也不用擔心漏掉關鍵信件了!

對了哥、姐,這間真的很稀有,我們趕快去看! 小晴手頭上剛好新進了一間在中正區、公設比超低、採光極佳,而且銀行貸款成數可以幫您談到非常漂亮的夢幻兩房!我的機車鑰匙和帶看資料都準備好了,我們今天下午就直接出發去看房,交給我您放心,小晴一定幫您談到最漂亮的成交價!

走吧,我們看房去囉!
簡報


上一篇
Day 12:Windows Spooler 層級的自動化控制:印表機驅動操縱
系列文
《拒絕爆肝加班!30天打通跨系統自動化與資料比對防線》13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言