[Outlook] 如何自動刪除沒有發件人、沒有主題的郵件 |使用 VBA 宏的快速解決方案

Eva

如果您使用 Microsoft Outlook,您是否曾發現帶有空白“發件人”和“主題”字段的電子郵件最終出現在您的收件箱中並且需要時間來處理?
有些人可能會覺得手動刪除電子郵件很麻煩,因為它們會通過垃圾郵件過濾器,或者無法通過正常的排序規則進行處理。

在本文中,對於那些因這些來自未知發件人且沒有主題的電子郵件而煩惱的人,我們將解釋一種具體方法,即使用 VBA 宏在新電子郵件到達時自動將電子郵件分類到“已刪除郵件”文件夾中(實際上是自動刪除它們)。

通過實施此宏,您將不太可能看到不必要的電子郵件,並且可能能夠顯著減少您花在整理收件箱上的時間。

在這篇文章中,我們將介紹可以通過複製粘貼的方式使用的VBA代碼全文、在Outlook中設置它的步驟、代碼的簡要說明和自定義提示,以及一步步詳細解釋使用宏時非常重要的注意事項和風險。

目錄

Outlook 標配的“排序規則”是非常有用的功能,可以自動組織許多電子郵件。
然而,如果你想根據“發件人姓名或主題完全為空”等精確條件,可靠地自動刪除不必要的電子郵件,現實情況是,僅靠這個標準排序規則很難處理,或者設置極其複雜。

因為,在標準規則設置屏幕上,要準確地指定“沒有輸入任何內容的空白(甚至不是空格)”的狀態並不容易,並且很難使其按預期工作。這是因為可能存在一些情況。

為了解決這個問題,使用 VBA 宏將會非常有效。
如果您使用 VBA 宏,程序將在電子郵件到達後立即運行。直接檢查發件人姓名和主題信息但可以準確判斷是否“完全空白”。

然後,只有符合條件的電子郵件才會被發送。立即自動移至“已刪除郵件”文件夾你可以。
彌補“排序規則”功能的局限性,高效可靠地刪除特定垃圾郵件等。使用 VBA 宏的一大優點是可以通過多種方式處理它們。

VBA宏代碼自動刪除沒有發件人或主題的電子郵件[全文]

第一的,“收到時自動將發件人姓名為空或主題為指定文件夾(默認為​​已刪除郵件)的電子郵件移至指定文件夾(默認為​​已刪除郵件)”的 VBA 宏代碼全文介紹一下。

此代碼利用名為 Application_NewMailEx 的特殊事件過程,當 Outlook 收到新電子郵件時會自動執行該事件過程。
所以這段代碼不是一個常規的“標準模塊”,而是一個“本期展望會議” 必須寫入(複製並粘貼)在特定位置。

下面是VBA代碼的全文。您可以復制並使用它。

在代碼的開頭在“設置”中,選擇刪除條件(“主題或發件人為空”或“主題和發件人均為空”)。(是空白嗎?)以及電子郵件移動到的文件夾(已刪除的項目、垃圾郵件文件夾等)。

Option Explicit

' --- 設定項目 ---
' 迷惑メール判定の条件: True = 件名か差出人のどちらか一方が空白なら削除 (リスク高)
'                       False = 件名と差出人の両方が空白の場合のみ削除 (より安全)
Const DELETE_IF_EITHER_IS_BLANK As Boolean = True ' ★True(または) / False(かつ) を選択

' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)
' --- 設定ここまで ---

' 新着メールイベント処理 (メール受信時に自動実行される)
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    
    Const olMail As Integer = 43 ' メールアイテムの識別番号

    ' 変数の宣言
    Dim arrEntryIDs As Variant             ' 受信メールIDの配列
    Dim objMail As Object                  ' メールアイテム用オブジェクト
    Dim targetFolderObject As Outlook.MAPIFolder ' 移動先フォルダ用オブジェクト
    Dim ns As Outlook.NameSpace            ' Outlook名前空間用オブジェクト
    Dim i As Long                          ' ループカウンター
    Dim subjectIsEmpty As Boolean          ' 件名が空白かのフラグ
    Dim senderIsEmpty As Boolean           ' 差出人が空白かのフラグ
    Dim deleteThisMail As Boolean          ' 削除対象かのフラグ

    On Error GoTo GeneralError ' マクロ全体で予期せぬエラーが起きた場合の飛び先

    ' Outlookの基本的な機能へアクセスするための準備
    Set ns = Application.GetNamespace("MAPI")
    
    ' 設定された番号に基づいて移動先フォルダを取得
    On Error Resume Next ' 特定フォルダが存在しない等のエラーを一旦無視
    Set targetFolderObject = ns.GetDefaultFolder(TARGET_FOLDER)
    On Error GoTo 0 ' エラー処理を通常に戻す

    ' 移動先フォルダが見つからなかった場合 (通常は起こり得ないが念のため)
    If targetFolderObject Is Nothing Then
        Debug.Print Now & ": 移動先フォルダ (番号 " & TARGET_FOLDER & ") が見つかりません。処理を中断します。"
        GoTo Cleanup ' 後処理にジャンプして終了
    End If

    ' 受信したメールのIDを分割して配列に入れる (複数メール同時受信対応)
    arrEntryIDs = Split(EntryIDCollection, ",")

    ' --- 受信したメールを一件ずつチェックするループ ---
    For i = LBound(arrEntryIDs) To UBound(arrEntryIDs)
        Set objMail = Nothing ' 前のループのオブジェクトをクリア

        ' メールIDからメールアイテムを取得 (失敗してもエラーで止めずに次へ)
        On Error Resume Next
        Set objMail = ns.GetItemFromID(arrEntryIDs(i))
        On Error GoTo 0 ' エラー処理を通常に戻す

        ' メールアイテムが正しく取得できた場合のみ、以下の処理を実行
        If Not objMail Is Nothing Then
            ' アイテムの種類が「メール」であるかを確認
            If objMail.Class = olMail Then
                
                ' 件名と差出人が空白かどうかをチェック (Trimで前後のスペースを除去)
                subjectIsEmpty = (Trim(objMail.Subject) = "")
                senderIsEmpty = (Trim(objMail.SenderName) = "") ' SenderNameで判定

                ' --- 削除条件の判定 ---
                deleteThisMail = False ' まず削除しないとして初期化
                If DELETE_IF_EITHER_IS_BLANK Then ' もし「どちらか空白で削除(True)」設定なら
                    If subjectIsEmpty Or senderIsEmpty Then deleteThisMail = True
                Else ' もし「両方空白で削除(False)」設定なら
                    If subjectIsEmpty And senderIsEmpty Then deleteThisMail = True
                End If
                ' --- 判定ここまで ---

                ' 削除条件に合致した場合、メールを指定フォルダへ移動
                If deleteThisMail Then
                    On Error Resume Next ' 移動時のエラー(例:アイテムがロックされている等)は無視
                    objMail.Move targetFolderObject
                    If Err.Number <> 0 Then ' 移動でエラーが発生した場合、イミディエイトウィンドウに記録を残す
                        Debug.Print Now & ": メール移動エラー: " & Err.Description & " (件名: '" & objMail.Subject & "', 差出人: '" & objMail.SenderName & "')"
                        Err.Clear
                    End If
                    On Error GoTo 0 ' エラー処理を通常に戻す
                End If
            End If
        Else
             ' メール取得自体に失敗した場合の記録 (Debug.Print)
             Debug.Print Now & ": メール取得エラー (EntryID: " & arrEntryIDs(i) & ")"
        End If
'ContinueLoop: ' エラー時のジャンプ先として使用していたが、ループのNextで自然に継続するため必須ではない
    Next i
    ' --- ループ終了 ---

' 後処理: 使用したオブジェクト変数をメモリから解放 (定型処理)
Cleanup:
    Set objMail = Nothing
    Set targetFolderObject = Nothing
    Set ns = Nothing
    Exit Sub ' サブルーチンを終了

' 一般エラーハンドラ: ループ中以外での予期せぬエラー発生時の処理
GeneralError:
    Debug.Print Now & ": マクロ実行中に予期せぬエラー発生: " & Err.Description & " (Error No: " & Err.Number & ")"
    Err.Clear ' エラー情報をクリア
    Resume Cleanup ' エラー発生時も必ず後処理を実行して終了する

End Sub

如何設置和使用 VBA 宏自動刪除沒有發件人或主題的電子郵件

從這裡開始,我們將實際設置在 Outlook 中引入的 VBA 宏,並開始自動刪除不必要的電子郵件(將它們移動到指定文件夾)。具體使用及設置步驟我們將使用實際屏幕以易於理解的方式解釋這一點。

如何在 Outlook 中設置 VBA 宏以自動刪除沒有發件人或主題的電子郵件

首先,我將向您展示如何向 Outlook 添加 VBA 宏,以自動刪除沒有發件人或主題的電子郵件。

請按照以下步驟將宏添加到 Outlook。

顯示開發者選項卡

要打開用於編輯和管理 VBA 宏的屏幕 (VBE),請單擊 Outlook 功能區。“發展”選項卡應該可見。
如果沒有顯示,請先參考下面的文章顯示“開發”選項卡。

相關文章

[Outlook] 如何打開開發者選項卡 |初學者也能輕鬆完成的 4 個簡單步驟
使用實際屏幕以易於理解的方式解釋顯示 Outlook“開發人員”選項卡的最短步驟。另外,為什麼“開發者”選項卡被隱藏了,顯示後可以使用哪些功能?

另請閱讀:如何安排郵件發送 Gmail|Outlook|Outlook.com

啟用宏

Outlook 的默認設置是禁用除數字簽名之外的所有宏,並且您自己創建的所有宏都將被忽略。
為了使宏起作用,必須進行設置以啟用它們(或允許在執行期間發出警告)。
有關詳細步驟,請參閱下面的文章“使用 Outlook 宏的準備工作,第 1 部分:啟用所有宏”。”,所以請提前進行設置。

相關文章

[Outlook] 詳細講解如何自動保存收到郵件的附件
引入宏來自動保存 Outlook 中收到的電子郵件附件。它提供了從如何在 Outlook 中安裝宏到實際代碼的易於理解的解釋。

單擊“開發者”選項卡

啟動 Outlook 並單擊“開發”選項卡請。

如何在 Outlook 中設置 VBA 宏來自動刪除沒有發件人或主題的電子郵件。步驟3 單擊“開發者”選項卡。

單擊“Visual Basic”

當您打開“開發人員”選項卡時,它位於最左側。單擊“Visual Basic”請。

如果Outlook中的功能區折疊起來難以操作,請參閱“【Outlook】如何始終顯示功能區(菜單欄)|兼容桌面版和網頁版”,切換為始終顯示功能區。

如何在 Outlook 中設置 VBA 宏以自動刪除沒有發件人或主題的電子郵件。步驟 4 單擊“Visual Basic”

單擊“此 Outlook 會話”

當您單擊“Visual Basic”時,將顯示如下所示的屏幕。

在左上框架中單擊“此 Outlook 會話”請。

如何在 Outlook 中設置 VBA 宏來自動刪除沒有發件人或主題的電子郵件。步驟 5 單擊“ThisOutlookSession”

粘貼VBA宏代碼以自動刪除沒有發件人或主題的電子郵件

在“ThisOutlookSession”內VBA宏代碼自動刪除沒有發件人或主題的電子郵件粘貼請。

如果您想自定義宏代碼,請參見下文。VBA宏解釋和調整技巧(更改刪除條件等)”並粘貼更改後的代碼。

如何在 Outlook 中設置 VBA 宏來自動刪除沒有發件人或主題的電子郵件。步驟 6 粘貼自動刪除沒有發件人或主題的電子郵件的 VBA 宏代碼。

點擊“保存”並點擊右上角的✕

粘貼後,它將位於左上角。點擊“保存”請。

如果可以覆蓋並保存點擊右上角的✕並關閉宏屏幕。

現在在 Outlook 中設置了自動刪除沒有發件人或主題的電子郵件的 VBA 宏。

如何在 Outlook 中設置 VBA 宏來自動刪除沒有發件人或主題的電子郵件。步驟7 單擊“保存”,然後單擊右上角的✕。

嘗試運行一個 VBA 宏來自動刪除沒有發件人或主題的電子郵件。

設置 VBA 宏後請務必重新啟動 Outlook。這是我的第一個宏(Application_NewMailEx事件)將被啟用。

再起動後、每次收到新電子郵件時,該宏都會自動運行。我會。無需手動運行它。

要了解它是如何工作的,測試符合刪除條件的郵件嘗試向自己發送電子郵件(例如,將主題和發件人留空)。

該電子郵件不在您的收件箱中,自動移動到指定文件夾(默認為​​“已刪除郵件”)如果有則說明配置成功。

如果不動,請再次檢查之前的設置(宏啟用、代碼位置、常量值等)。

VBA宏解釋和調整技巧(更改刪除條件等)

這裡“它是如何運作的?”,和“我如何調整(定制)行為?”將使用具體示例進行解釋。

您不需要理解所有代碼,但知道如何調整它將使使用宏更安全、更方便。

代碼的主要行為

當 Outlook 中收到新電子郵件時,此宏會自動啟動(Application_NewMailEx事件)。

對於收到的每封電子郵件,主題和發件人姓名是是完全空白的嗎?如果滿足設定的條件,則會發送電子郵件。指定文件夾(默認設置為“已刪除項目”)。

它還包括即使發生錯誤也盡可能繼續處理的措施。

調整技巧1:更改郵件刪除條件(OR和AND)

用這個宏最重要的調整是刪除郵件的“條件”。是。
在代碼的開頭--- 設定項目 ---更改 中的以下行。

' 迷惑メール判定の条件: True = 件名か差出人のどちらか一方が空白なら削除 (リスク高)
'                       False = 件名と差出人の両方が空白の場合のみ削除 (より安全)
Const DELETE_IF_EITHER_IS_BLANK As Boolean = True ' ★True(または) / False(かつ) を選択

True(或條件 - 默認設置):“主題”或(或)“發件人姓名”如果其中一個為空,則將其刪除條件是必須這樣做。

  • 例如:
    • 差出人「ABC株式會社」、件名「」(空白) →它將被刪除。
    • 發件人“”(空白),主題“會議通知”→它將被刪除。
    • 發件人“”(空白),主題“”(空白)→它將被刪除。
  • 注意點:雖然您可以刪除許多不必要的電子郵件,例如係統通知和一些合法電子郵件,意外刪除重要電子郵件的風險會增加。

False(和條件 - 推薦):“主題”和(和)“發件人姓名”僅當兩者均為空白時才刪除條件是必須這樣做。

  • 例如:
    • 差出人「ABC株式會社」、件名「」(空白) →沒有刪除。
    • 發件人“”(空白),主題“會議通知”→沒有刪除。
    • 發件人“”(空白),主題“”(空白)→它將被刪除。
  • 優點:這大大降低了意外刪除的風險。實現更安全的操作是。除非有特殊原因False我們強烈建議您更改為 .更改在代碼中TrueFalse您只需將其重寫為 即可輕鬆完成此操作。

調整技巧2:更改電子郵件移動的文件夾

代碼開頭還指定了電子郵件移動到的文件夾。--- 設定項目 ---你可以改變它

' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)

初始設置3是“已刪除郵件”文件夾。
如果您想將其發送到“垃圾郵件”文件夾而不是“已刪除郵件”文件夾,請更改此號碼。23(數字表示垃圾郵件文件夾olFolderJunk)。

  • 具體例子:在代碼中Const TARGET_FOLDER As Integer = 3Const TARGET_FOLDER As Integer = 23如果您重寫並保存,符合條件的電子郵件將直接移至“垃圾郵件”文件夾,而不是“已刪除郵件”文件夾。

通過調整這些設置以適應您的使用情況,您可以更方便、更安全地使用宏。

特別是刪除條件(DELETE_IF_EITHER_IS_BLANK)設置直接關係到誤刪除的風險,請慎重考慮。

[重要]運行VBA宏之前的注意事項和風險

我介紹的VBA宏很方便,但它是一個強大的功能,可以自動刪除(移動)電子郵件。
請您在使用本服務前務必了解以下重要注意事項及風險,並謹慎使用。

1. 意外刪除必要電子郵件的風險(最重要)
第一的,無意刪除必要電子郵件的風險有。
特別是,使用默認的 OR 條件(通過將其留空來刪除主題或發件人),系統通知和某些郵件列表等重要電子郵件也可能成為目標。
為了安全,將代碼刪除條件改為AND條件(只有當主題和發件人都為空時才刪除)(更改常量False)強​​烈推薦。
首先測試將電子郵件移至“垃圾郵件”文件夾的設置也是一個好主意。

2. 數據永久刪除的風險
接下來,請記住,通過宏移至“已刪除郵件”或“垃圾郵件”文件夾的電子郵件最終可能會被永久刪除。特別是自動刪除已刪除項目的設置如果已啟用,請小心。
一旦永久刪除,就很難恢復。

3. 出現意外錯誤的可能性
儘管代碼中包含了基本的錯誤保護,但它並沒有涵蓋所有情況。
請理解,在極少數情況下,可能會出現錯誤或產品可能無法按預期工作。

4. 備份建議
為了應對這種緊急情況,在運行宏之前始終備份 Outlook 數據文件請拿走。
有關 Outlook 數據文件的存儲位置的信息,請參閱“要修復的數據文件(pst 文件)在哪裡?”我會解釋清楚。

5. 理解代碼的基本行為
最後,安全使用宏的第一步是至少使用本文中的解釋了解“在什麼條件下”和“它們做什麼”。

請自行決定並負責使用本文中介紹的 VBA 宏。
請注意,我們對宏執行造成的任何直接或間接損害(包括數據丟失)不承擔任何責任。

有關自動刪除沒有發件人或主題的電子郵件的 VBA 宏的常見問題解答

我們整理了有關自動刪除沒有發件人或主題的電子郵件的 VBA 宏的常見問題和解答列表。

該宏是否存在刪除非垃圾郵件的重要電子郵件的風險?

是的,存在這樣的風險:。特別是代碼初始化的OR條件(DELETE_IF_EITHER_IS_BLANK = True),然後輸入主題或發件人姓名。兩邊空白如果是的話,就會被刪除,所以即使是系統通知等必要的郵件也會被刪除的風險比較高。

最大限度降低意外刪除風險的最安全設置是什麼?

最推薦和最安全的設置位於代碼的開頭。在 AND 條件中添加刪除條件 (DELETE_IF_EITHER_IS_BLANK = False)改為這是要做的。
結果,“主題”和“發件人姓名”僅限兩者均為空白的電子郵件會進行針對性刪除,大大降低誤刪除的風險。

使用宏刪除(移動)的電子郵件會完全消失嗎?可以恢復嗎?

默認情況下,電子郵件會移至“已刪除郵件”。
當它位於此文件夾中時,可以像正常刪除的電子郵件一樣恢復(移動)。
但是,如果您清空“已刪除郵件”或在設置中啟用了自動清理,永久刪除且難以恢復這將是。特別是自動刪除已刪除項目的設置如果已啟用,請小心。
如果您將電子郵件移至“垃圾郵件”文件夾,也會存在類似的風險。

此宏是否有可能導致意外錯誤並對 Outlook 產生負面影響?

您提供的代碼包括基本的錯誤處理,因此宏本身不太可能對整個 Outlook 造成任何嚴重的負面影響。
但,我們不能保證永遠不會發生意外錯誤。。因此,我們建議您提前做好備份。

這個宏什麼時候起作用?

這個宏是Application_NewMailEx因為 Outlook 使用該事件在您的收件箱(或初始接收位置)收到它後立即它將自動開始工作。
無需打開電子郵件或手動執行任何操作。

當我在刪除條件中說“空白”時,是否也意味著它只是一個空格?

是的,將有資格
在代碼中Trim由於使用了該功能,因此主題和發件人姓名為即使它僅由空格字符組成,也被視為“空白”。如果滿足刪除條件(OR 或 AND),則該項目將被刪除(移動)。

即使“發件人姓名”為空,電子郵件地址本身即使存在也會被刪除嗎?

是的,它可能符合刪除條件。
此代碼用於電子郵件SenderName這取決於屬性(顯示的發件人姓名)是否為空。因此,電子郵件地址 (SenderEmailAddress) 被設定,SenderName如果為空,則可能符合刪除條件(特別是OR條件)。

此宏是否也適用於直接到達我設置的其他文件夾(例如特定子文件夾)而不是我的收件箱中的電子郵件?

不,通常不被覆蓋
Application_NewMailEx該事件基本上是在 Outlook 的默認接收過程(到達收件箱)時觸發的。
最初通過服務器端規則或其他客戶端規則分類到不同文件夾的電子郵件不太可能通過此宏檢查。

此宏是否也適用於我已經收到並滯留在收件箱中的舊電子郵件?

不,不適用
這個宏是Application_NewMailEx事件,即“我收到一封新電子郵件”事件它的工作原理基於.
沒有追溯處理過去收到的電子郵件的功能。

此宏還會刪除被 Outlook 垃圾郵件過濾器分類到“垃圾郵件”文件夾中的電子郵件嗎?

不,一般不會被刪除
在許多情況下,Outlook 的標準垃圾郵件過濾流程是Application_NewMailEx在活動之前執行。
因此,直接發送到垃圾郵件文件夾的電子郵件將不會被此宏檢查。

如何將目標從“已刪除郵件”文件夾更改為“垃圾郵件”文件夾?

在代碼的開頭--- 設定項目 ---Const TARGET_FOLDER As Integer = 3行中的數字323請保存並重新啟動 Outlook。 (3是已刪除的項目,23是垃圾郵件文件夾編號。 )

即使我設置了它,宏似乎根本不起作用。我應該檢查什麼?

第一的重新啟動 Outlook請檢查您是否已這樣做。下一個宏安全設置已啟用或代碼為ThisOutlookSession代碼中的寫入和保存是否正確?恆定設置(尤其DELETE_IF_EITHER_IS_BLANK) 是否符合預期,請按順序重新檢查。

如何從 Outlook 中完全刪除(卸載)此宏?

粘貼的刪除整個代碼請覆蓋並保存。
然後重新啟動 Outlook,宏將不再起作用。

這個VBA宏可以在Mac版、網頁版/智能手機版的Outlook中使用嗎?

Mac版Outlook支持VBA,但可能與Windows版本不完全兼容。無法保證運行
Outlook 網頁版(Web 版 Outlook)以及 Outlook 應用程序的智能手機/平板電腦版本所以,不支持且無法使用 VBA 宏。

其他 Outlook 文章

單擊此處查看其他 Outlook 文章。請看一下。