答え1
まとめ
Google の SMTP サーバー経由でメールを送信する Powershell スクリプトを作成します。このスクリプトはタスク スケジューラで実行でき、スケジュールに従って実行できます。Outlook でメールを受信すると、そのメールを検索するルールによって Outlook VBA スクリプトがトリガーされます。Viola。
ステップ1: VBA スクリプトをトリガーするための「トリガー」メールを送信するために使用する Gmail アカウントの安全な資格情報ファイルを作成します。
Powershellで実行
read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt
これにより、そのGmailアカウントのパスワードの安全なバージョンがユーザーディレクトリに保存されます。2要素認証を使用する場合は、アプリパスワード次の手順で使用するこの資格情報の通常のパスワードの代わりに使用します。
ステップ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
新しい DWORD (32 ビット値) に移動し、"EnableUnsafeClientMailRules"
値 1 を追加する必要があります。
ステップ4: 以下を検出するルールを作成します。
- ルールをトリガーするためにPowershellスクリプトで使用するGmailの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