[Outlook] 如何自动删除没有发件人、没有主题的邮件 |使用 VBA 宏的快速解决方案
如果您使用 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 并单击“开发”选项卡请。
步单击“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我们强烈建议您更改为 .更改在代码中True的False您只需将其重写为 即可轻松完成此操作。
调整技巧2:更改电子邮件移动的文件夹
代码开头还指定了电子邮件移动到的文件夹。--- 設定項目 ---你可以改变它
' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)
初始设置3是“已删除邮件”文件夹。
如果您想将其发送到“垃圾邮件”文件夹而不是“已删除邮件”文件夹,请更改此号码。23(数字表示垃圾邮件文件夹olFolderJunk)。
- 具体例子:在代码中
Const TARGET_FOLDER As Integer = 3的Const 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行中的数字3的23请保存并重新启动 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 文章。请看一下。
