Outlook 2010在Outlook数据文件上运行规则

时间:2014-08-01 10:06:04

标签: vba email outlook rules

我使用的是Thunderbird,现在转向Outlook 2010,PC是Windows 7 Professional,64位机器,但我使用32位Office 2010。

我有8个电子邮件地址,包括4个Gmail地址:都是IMAP。没有交换服务器。

我相信使用IMAP,从帐户收件箱中移动电子邮件意味着他们不再在服务器上,因此其他设备无法再看到它们了 - 很高兴能够对此进行更正。

雷鸟 我将所有电子邮件复制(不移动)到本地文件夹收件箱。 然后我在该本地文件夹收件箱下有一个文件夹结构。 我单击一个运行规则按钮,它将它们(而不是副本)移动到相关的子文件夹。 结果是除了垃圾邮件和没有规则的合法电子邮件之外,收件箱文件夹也被清空。

Outlook2010中 我有VBA例程,它运行所有规则并且工作正常,我甚至添加了按钮来触发它。

我通过在Outlook数据文件收件箱下创建我的文件夹结构重新创建了我的Thunderbird设置。

我为每个电子邮件帐户创建了一条规则,即将所有邮件复制(不移动)到该Outlook数据文件收件箱。

我知道必须在每个帐户下创建规则,并且我相信不能在任何Outlook数据文件文件夹或子文件夹中创建规则。

但是,如果您随后转到Rules / Alert弹出并选择Run Rules Now,您可以选择要运行的规则,它们将在包括任何Outlook数据文件的任何文件夹上运行。

基本上,我希望自动执行在Outlook数据文件收件箱中运行所有规则的过程。

我无法弄清楚如何使VBA代码选择该Outlook数据文件收件箱,然后仅对该Outlook数据文件收件箱运行所有规则。

同样,我认为这是必要的,因为如果移动规则从帐户电子邮件收件箱运行,则一旦从帐户电子邮件收件箱中移动电子邮件,就不再可以在任何其他设备上查看这些电子邮件。

我知道我可以将每个帐户电子邮件收件箱中的所有电子邮件复制到相关的子文件夹,而不是先打扰复制到Outlook数据文件收件箱。但这意味着我仍然需要定期检查所有8个电子邮件帐户收件箱,以防有重要的电子邮件在那里我没有创建规则。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我无法用VBA帮助你,但允许我提出一个替代方案。 首先让我提一下它适用于Outlook数据文件和您指定的任何收件箱。如果您熟悉VBA,那么使用我的解决方案应该没有任何问题,因为代码非常简单。

similar question on superuser下已经描述了完整的解决方案。

您可以查看它并从Github project p0r克隆它。它是免费的。

为了使它更具相关性,请允许我详细说明。我正在使用Powershell自动化Outlook并在脚本中创建自定义规则。

要连接到Outlook数据文件,您可以使用以下代码:

$pstPath = "D:\path\to\pst\file.pst"     


# CREATING OUTLOOK OBJECT
$outlook = New-Object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")

# GETTING PST FILE THAT WAS SPECIFIED BY THE PSTPATH VARIABLE
$pst = $namespace.Stores | ?{$_.FilePath -eq $pstPath}

# ROOT FOLDER
$pstRoot = $pst.GetRootFolder()

# SUBFOLDERS
$pstFolders = $pstRoot.Folders

# PERSONAL SUBFOLDER
$personal = $pstFolders.Item("Personal")

您可以通过替换IF语句中的条件来创建自己的规则:

# MOVE EMAILS WITH SPECIFIC STRING IN TITLE TO THE SUBFOLDER /RANDOM/ UNDER PST FILE
# !      DESTINATION FOLDER SPECIFIED INLINE
    IF ($Email.Subject -match "SPECIFIC STRING IN TITLE") {
        $Email.Move($pstFolders.Item("Random")) | out-null
        display  ([string]$Email.Subject ) ([string]"Yellow")
        continue
    }

我正在使用$Email.Move方法将电子邮件对象从收件箱移动到PST文件,但如果您愿意,可以使用$Email.Copy。当然,您也可以在Outlook数据存储中的目录之间移动电子邮件。

希望这会有所帮助。如有任何问题,请告诉我。我很乐意帮忙。

答案 1 :(得分:0)

Re:我无法弄清楚如何让VBA代码选择Outlook数据文件收件箱...

Private Sub ProcessPST()

    Dim objNs As Namespace
    Dim pstFolder As folder
    Dim objItem As Object
    Dim i As Long

    Set objNs = GetNamespace("MAPI")
    Set pstFolder = objNs.Folders("Test") ' <--- Test is the name of the pst

    For i = 1 To pstFolder.Items.count
        Set objItem = pstFolder.Items(i)
        Debug.Print objItem.Subject
    Next i

ExitRoutine:
    Set objNs = Nothing
    Set pstFolder = Nothing
    Set objItem = Nothing

End Sub