如何使用带有VBA脚本的规则过滤Outlook电子邮件?


14

使用默认的电子邮件规则,例如使用通配符搜索主题或邮件正文,某些事情是不可能的。您可以输入多个单词,但是如果您需要两个单词分开一个字符,那就不一样了。如何编写自己的Visual Basic for Applications代码以过滤Outlook电子邮件?

Answers:


12

对于实现此简单过滤器所需的所有这些部件,我都一目了然。相比之下,Unix procmail过滤器是如此易于使用。所有Microsoft Outlook向导都会使用通配符来进行简单筛选。尽管Microsoft默认提供的许多电子邮件过滤条件很有用,但没有什么可以比运行代码的灵活性和自定义更具优势。

  1. 编写您的代码。

Alt-F11调出VBA代码编辑器。双击ThisOutlookSession。编写您的代码。就我而言,它是在主题行上使用正则表达式,而不是将其移动到DefaultFolder,而是将其移动到子文件夹中的pst中。

Sub filter(Item As Outlook.MailItem)
    Dim ns As Outlook.NameSpace
    Dim MailDest As Outlook.Folder
    Set ns = Application.GetNamespace("MAPI")
    Set Reg1 = CreateObject("VBScript.RegExp")
    Reg1.Global = True
    Reg1.Pattern = "(.*Abc.20.*)"
    If Reg1.Test(Item.Subject) Then
        Set MailDest = ns.Folders("Personal Folders").Folders("one").Folders("a")
        Item.Move MailDest
    End If
End Sub
  1. 使用规则为每个传入电子邮件运行代码。

在规则下,选择“管理规则和警报...”。新规则看起来像

Apply this rule after the message arrives run Project1.ThisOutlookSession.filter

为此,对于步骤1:选择条件:只需单击下一步。单击确定确认它适用于所有消息。对于“选择操作”,选中“运行脚本”,然后单击以选择过滤器脚本,然后选择“下一步”或“完成”。对于“选择例外”,单击“下一步”或“完成”。给它起一个好名字,例如vba-filter,然后选中“启用此规则”。单击完成。由于它可以处理本地文件夹,因此当它要求确认此规则不适用于您在线或从其他设备检查的电子邮件时,请单击“确定”。单击“确定”,进入“规则和警报”对话框。

  1. 未对宏进行签名时,Outlook不喜欢它。要对宏进行自签名,请创建并使用证书

我阅读了许多其他的部分解决方案,例如宏和创建用户定义的列。这样可以进行UI排序或视图过滤,但是会在它们进入时编辑所有消息,这不是我想要的。
格兰特·鲍曼

1
我的Outlook客户端在启动Outlook时会不一致地禁用运行vbscript vba-filter的规则。这引起了问题。vbscript上还有一个字符限制,以添加到每个规则中。为了使它们始终如一地工作,尽管灵活性较低,我使用标准的Outlook筛选器重写了筛选器,以便它们始终可用。
格兰特·鲍曼

2
缺少运行脚本的此选项。在此处找到相关链接:slipstick.com/outlook/rules/outlook-2016-run-a-script-rules
Jayan

上面的代码对我不起作用。我将Abc.20放在主题文件中,但消息从未移出收件箱。
Tensigh

1
使用调试窗口,我设法使正则表达式起作用。现在只需要移到正确的文件夹即可。我想我能弄清楚。谢谢你的帮助。
Tensigh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.