答案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