ぴよ丸水産

週末ファゴッティストによる技術ブログ

【RocketChat】Outlookで受信したメール本文をRocketChatに転送する

はじめに

Outlookのマクロを使用して、
条件に合致するメール本文をRocketChatに転送する仕組みを作りました。

イントラネットワーク(常駐先)でしか見られない情報を、
AWS上のRocketChatにとばして、
自社でも確認できるようにするというミッションです。

ちなみに、常駐先と合意の上で実装してます。

環境

  • デスクトップPC Windows10
  • Outlook2016(だったような)
  • RocketChat2.0.0(だったような)

RocketChat側 準備

着信Webhookを作成します。 OutlookマクロからのHTTPリクエストに対して、 口を開けます。

f:id:blue-38:20191012130808j:plain

下記の手順で、作成画面まで行きます。
管理サービス連携新しいサービス連携着信Webhook

以下のような設定で作成します。

f:id:blue-38:20191012130958p:plain

最低限、自身で設定することは、

  • 名前(オプション)
  • 投稿先チャンネル

くらいです。

Outlookマクロに必要な情報は、
Webhook URLです。
自動で生成されるので、控えておきましょう。

Outlookマクロ 作成

pineplanter.moo.jp

こちらを参考に、
マクロを作る準備をしました。

マクロっていうと、Excelでは?って感じですが。
私もわからず、最初Excelで作っていました。
のちの工程で、Excelマクロを呼び出せないことがわかり、
ほへぇ、Outlookで作るのね!ってなりました。

マクロを実行するための事前準備

  • Microsoft Scripting Runtimeの有効化 ツール参照設定で参照可能ライブラリ一覧を開き、
    Microsoft Scripting Runtimeにチェックを入れます。
    外部ライブラリを使うために、必要、なんだったかな。

  • VBA-JSONをインポート マクロ内でJSONを生成するために必要なモジュールです。

github.com

上記のURLからダウンロードし、
JsonConverter.basをマクロにインポートします。

作成したマクロ

Sub CustomRule_Forward_to_RocketChat(Item As Outlook.MailItem)

    'RocketChatとHTTP通信するために、ServerXMLHTTPオブジェクトを定義
    Dim objHTTP As Object
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    'URLも定義
    Dim URL As String
    URL = "<RocketChat Webhook>"
    '転送するメール本文を入れ込むJsonオブジェクトを定義
    Dim JsonObject As Object
    Set JsonObject = New Dictionary
    'Jsonオブジェクトのキーtextにメール本文(Item.body)を入れ込む
    JsonObject.Add "text", Item.Body
    'HTTP POSTリクエスト送信
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "Content-Type", "application/json"
    objHTTP.setProxy 2, "<プロキシサーバURL>"
    objHTTP.Send JsonConverter.ConvertToJson(JsonObject)
    
End Sub

<RocketChat Webhook>には、
前工程で控えたWebhook URLを記載してください。

Outlookのメール仕分けルールを作成

メールを転送するトリガーは仕分けルールに仕掛けます。

事前準備

仕分けのアクションに「スクリプトを実行する」
という選択肢を使えるようにするために、
下記のレジストリのパラメータを追加します。

キー : HKEY_CURRENT_USER\Software\Microsoft\Office\xx.0\Outlook\Security
名前: EnableUnsafeClientMailRules
種類: REG_DWORD
値: 1 (有効)

仕分けルールの設定

  1. オプションを開いて、仕分けルールと通知の管理をクリック
  2. 新しい仕分けルールの作成をクリック
  3. 転送する条件を設定します。
    • (例)[差出人]がXXXXの場合
  4. メッセージに対する処理をスクリプトを実行するにチェックします。
  5. スクリプトに前工程で作成したマクロを紐づけます。

これでこのルールを有効にして運用しておけばOK!

ちなみに、転送は以下の時間に限られます。

  • Outlookを起動している時間
  • RocketChatサーバを起動している時間

まとめ

Outlook起動し続けないといけなかったり、
なかなか制約がでかいですが。。
自社にいながらも、常駐先のイントラのメールに、
問い合わせなど来ていないか把握できるようになりました。

参考

www.atmarkit.co.jp