WordやExcel等の例に漏れず、Outlookもマクロが組めます。
メール送信時のアクションとして、SlackのIncoming Webhookを叩いてみます。
タスク管理などに応用できるかも?
Outlookでマクロを使うための下準備
マクロを組む準備と、マクロを実行できるように設定をいじります。 Outlookのメニューバーから操作します。
- ファイル > オプション > ユーザーリボン と選択し、開発 をONにする
- メニューバーに、開発タブが表示される
- 開発 > Visual Basic を開いて作成する
Webhookを利用してSlackに投稿する
この記事の例では、SlackのIncoming Webhookというインテグレーションを利用します。
Incoming Webhookの利用については、以下の記事に説明があります。
マクロの作成
Incoming Webhookが発行する受信用URLにHTTPリクエストを送信し、Slackへの投稿を行うサンプルです。
開発 > Visual Basic > 画面左上のProject1以下を展開 > ThisOutlookSessionを開きます。
ThisOutlookSessionに以下を記述して保存します。
Outlookから送信したメールを、SlackにもPOSTします。
TargetURL = "https://hooks.slack.com/services/…"
12行目のTargetURL
には、Incoming Webhookで生成したURLを指定します。
sendText = "payload={""text"":""件名: " & objMail.Subject & "\n本文: " & Left(objMail.Body, 200) & """}"
17行目のsendText
部分が、実際にWebhookのURLに送信される内容です。メールの件名と本文をPOSTしています。
Left(objMail.Body, 200)
メールの引用などで本文が長すぎると投稿が大変なことになるため、sendText
内の上記部分で、半角200文字分だけ投稿されるようにしています。
指定チャンネルへのPOST
デフォルトでは、マクロからPOSTした内容は、Incoming Webhookで設定してある送信先チャンネルに投稿されるようになっています。
sendText
の部分でchannel
プロパティを指定することで、任意のpublicチャンネル、ユーザーのDMへ投稿することが可能です。
random
チャンネルへの投稿
sendText = "payload={""channel"":""#random"", ""text"":""件名: " & objMail.Subject & "\n本文: " & Left(objMail.Body, 200) & """}"
- 特定ユーザーのDMへ投稿
sendText = "payload={""channel"":""XXXXXXXXX"", ""text"":""件名: " & objMail.Subject & "\n本文: " & Left(objMail.Body, 200) & """}"
※XXXXXXXXX
の箇所は、Slackのchannel/ユーザーの識別IDです。チャンネル名あるいはユーザー名を右クリックして取得します。
※右クリック > リンクをコピー > 以下のような形で取得できるリンクの、末尾部分がIDになります。
https://hogehoge.slack.com/team/XXXXXXXXX
投稿にメンションを含める
SlackのIncoming Webhooksでメンションを飛ばす方法を参考にする。
sendText
内、text
プロパティにて、以下の書式に則ってメンションを記述することができます。
記法 | メンション |
---|---|
<!here> | @here |
<!channel> | @channel |
<@user_id> | @michael |
記述例
sendText = "payload={""text"":""<!channel> 件名: " & objMail.Subject & "\n本文: " & Left(objMail.Body, 200) & """}"
マクロ作成後、実行できない(有効にならない)場合
マクロの実行時に警告が出て実行できないなどがあれば、署名の作成を行うと解決する場合があります。マクロのセキュリティ設定で、署名のないマクロをブロックするようになっていることが多いです。
最近では下記のファイルを直接実行してデジタル署名を作成するらしいですが、ちょっと怖いですよね。
※ 署名を作らなくてもマクロを有効にできます。何か起きても責任は取れません。
C:\Program Files\Microsoft Office\root\Office16\SELFCERT.EXE
署名の作成を行ったのにまだマクロが動いてくれない場合、一度警告を出させ、明示的に実行を許可してやるとうまくいくケースがあります。
署名を作成しない場合でも、この手順は有効みたいです(動いた例あり)。
- (Outlookのメニューバー)開発 > マクロのセキュリティ を開く
- すべてのマクロに対して警告を表示する にチェックして保存
- Outlookを再起動
- マクロの実行について警告のポップアップが表示される
- 実行を許可し、マクロを有効化
- マクロの動作をテストし、動いたらガッツポーズ
※ 署名を付けてマクロを作成した場合は、ここで署名単位で実行を許可することができます。後々マクロの変更とか作成とかした際に実行許可の手間が省けるとかそういう話です。
参考
- 送信済みフォルダーに保存されるメールにフラグを自動的につけるマクロ
- VBAからSlackやRocket.Chatにメッセージ投稿する
- Slack APIを使用してメッセージを送信する #Incoming WebHooks
- Slack — APIに使う「チャンネルID」を取得する方法
- SlackのIDとは何ですか?
- SlackのIncoming Webhooksでメンションを飛ばす方法
- デジタル署名したマクロを有効化できない場合がある
- 今回「Outlook → bot → スラッシュコマンドでリマインダ登録」というやり方は(Slackがしてほしくなさそうだったので)採用しませんでした。