排程按時間執行 Outlook VBA 腳本

排程按時間執行 Outlook VBA 腳本

這個問題是這個SO帖子的不同(簡化)版本(關聯)。

我有一個特定的 Outlook VBA 腳本,我想在每天下午 2 點自動運行(其他腳本則在其他多個時間運行)。運行客戶端很好,因為計算機始終處於開啟狀態。我怎樣才能可靠地完成這個任務?

這 (連結的)所以帖子概述了我嘗試過的一些方法,並且這個帖子這是對方法的一般性詢問,從中誕生了我關於一次跑步的具體問題。

答案1

概括

我們將建立一個 Powershell 腳本,透過 Google 的 smtp 伺服器發送電子郵件。該腳本可以透過任務計劃程式運行,這允許您按計劃運行它。當 Outlook 中收到電子郵件時,尋找該電子郵件的規則將觸發 Outlook VBA 腳本。中提琴。

步驟1: 為您將用於傳送「觸發」電子郵件以觸發 VBA 腳本的 Gmail 帳戶建立安全憑證檔案。

在 Powershell 中,運行

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

這將在您的使用者目錄中儲存該 Gmail 帳戶密碼的安全版本。請注意,如果您使用雙重認證,您將需要獲得應用程式密碼而不是此憑證的普通密碼,您將在以下步驟中使用該密碼。

第2步: 此 Powershell 腳本將使用您自己提供的憑證透過 Google 的 smtp 伺服器發送電子郵件。適當地設定字段,選擇您將在 Outlook 規則中註釋的特定的非常獨特的主題(例如“@TRIGGERMYVBA21”)。

   # 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並新增一個標題為 1 的新 DWORD(32 位元值)"EnableUnsafeClientMailRules"

步驟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

相關內容