计划在何时运行 Outlook VBA 脚本

计划在何时运行 Outlook VBA 脚本

这个问题是这个SO帖子的不同(简化)版本(关联)。

我有一个特定的 Outlook VBA 脚本,希望它每天下午 2 点自动运行(其他脚本则在其他多个时间运行)。在客户端运行没问题,因为计算机始终处于打开状态。我如何才能可靠地实现这一点?

这 (链接)这篇文章概述了我尝试过的几种方法,并且这篇文章是对方法的一般性询问,由此我产生了关于一次性跑步的具体问题。

答案1

概括

我们将创建一个 Powershell 脚本,该脚本将通过 Google 的 smtp 服务器发送电子邮件。此脚本可以通过任务计划程序运行,允许您按计划运行它。当 Outlook 收到电子邮件时,查找该电子邮件的规则将触发 Outlook VBA 脚本。Viola。

步骤1: 为您将用于发送“触发”电子邮件以触发 VBA 脚本的 Gmail 帐户创建一个安全凭证文件。

在 Powershell 中,运行

read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt

这会将您该 Gmail 帐户密码的安全版本存储在您的用户目录中。请注意,如果您使用双因素身份验证,您需要获取应用程序密码而不是此凭证的正常密码,您将在以下步骤中使用该密码。

第2步: 此 Powershell 脚本将使用您自己提供的凭据通过 Google 的 smtp 服务器发送电子邮件。适当设置字段,选择一个特定的非常独特的主题(例如,“@TRIGGERMYVBA21”),您将在 Outlook 规则中注明该主题。

   # You must paste your password after running the command:  
   # read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt
   # before running the next part of the script.

   #Create credential file
    $password = get-content $Home\autopass.txt | convertto-securestring
    $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "[email protected]",$password

    #Send automatic email
    $From = "[email protected]"
    $To = "[email protected]"
    $Subject = "@TRIGGERMYVBA21"
    $Body = "some body"
    $SMTPServer = "smtp.gmail.com"
    $SMTPPort = "587"

    Send-MailMessage -From $From -to $To -Subject $Subject `
        -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
        -Credential ($credentials)

        # possible additions
        # $Cc = "[email protected]"
        # $Attachment = "dir\attachment.txt"
        # both of which require the following tags in the Send-MailMessage command
        # -Attachments $Attachment -Cc $Cc

将脚本保存为 .ps1 文件。

步骤3:确保您可以在 Outlook 中制定规则,以便将“运行脚本”作为操作。如果不能,您需要使用 regedit 转到HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security并添加一个新的 DWORD(32 位值),标题为,"EnableUnsafeClientMailRules"值为 1。

步骤4: 创建一条规则来查找:

  • 您将在 Powershell 脚本中用来触发规则的 Gmail 地址
  • 您在 Powershell 脚本中创建的唯一主题行(例如“@TRIGGERMYVBA21”)

进而:

  • 删除电子邮件,
  • 并运行一个脚本

步骤5: 设置任务计划程序规则,在您想要运行 Powershell 脚本时触发该脚本。您将选择“启动程序”作为操作,然后在程序中键入“powershell”,最后在添加参数框中键入“-File directory\script.ps1”。

顺便说一下,我使用这个来暂停电子邮件,直到它们可以使用文件夹移动 VBA 脚本进行操作。我将电子邮件移动到特定文件夹,然后当该特定文件夹的规则触发时,它们会移回收件箱。

为了完整性,将该脚本包含在这里:

Sub moveTheItems(item As Outlook.MailItem)
 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim myItem As Object

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myItems = myInbox.Items
 Set myDestFolder = myInbox
 Set myItems = myInbox.Folders("Snooze Until 3 PM").Items   

 For i = myItems.Count To 1 Step -1 'Iterates from the end backwards
    myItems.item(i).Move myDestFolder
 Next
End Sub

相关内容