column

外部との連携 メール受信をトリガーにしてジョブフローを実行する

運用の現場ではSlackのようなメッセンジャーアプリが利用されてきていますが、メールによる通知もまだまだ多いと思います。具体的には、システム側でのcronによる処理結果や監視ツールからのレポートなどがメールで通知されてくるケースがあります。今回はKompiraがメールサーバーよりメールを受信し、その内容によってメンテナンス処理を実行する方法をご紹介します。

ここでは、メールサーバーよりIMAP4/POP3プロトコルを通じて、メールを取り込む「メールチャネル」を利用します。メールチャネルは設定されているメールサーバー(IMAP4/POP3サーバー)をチェックし、メール受信をした場合にはそのメールを取得し、ジョブフローに渡します。この際に受信したメールはメールサーバーから削除されます。メールチャネルはあらかじめ指定された時間間隔でメール受信のポーリング処理を行います。

 
動作確認環境

ソフトウェア バージョン
Kompira 1.4.10.post2

 
メールチャネルの作成

「メールチャネル」はジョブフローと同様に、管理画面から作成します。この際に型指定のプルダウンでは「メールチャネル」を指定します。ここでは「mchan」という名前で作成します。

メールチャネルの作成

次のようなメールチャネルの設定画面が表示されます。

メールチャネル設定画面

 

フィールド 説明
サーバー名 IMAP/POP3サーバーをホスト名かIPアドレスで指定
プロトコル メール受信のプロトコルとしてIMAP/POP3のいずれかを指定
SSL SSLによる通信を行う場合に有効化します。
ポート番号 受信のポート番号を指定します。指定が無い場合にはデフォルトのポートが使用されます。
ユーザー名 メールサーバーのユーザー名を指定
パスワード メールサーバーのパスワードを指定
受信チェック間隔 新着メッセージを確認する間隔を分単位で指定します。デフォルトは10分で、「0」を指定するとデフォルト値が指定されます。負の値を指定した場合は新着メッセージの確認を行いません。
無効 メールサーバーへの接続を無効にします
ログサイズ ログの最大サイズを指定。最大サイズを超えた場合には古いメッセージから削除されます。(ログはメールチャネル画面の”ログ”タブで閲覧可)

 

 
メールを受信するジョブフローの作成

作成したメールチャネル”mchan”をジョブフロー中で利用する際には、”<./mchan>”のように、<>で囲みます。受信したメッセージの内容は$RESULTに格納されます。

メッセージの内容はヘッダー部分も本文部分も一緒になっているため、mail_parse() という組み込み関数を利用して、辞書型のデータに変換します。メールのヘッダー情報に加えて”Body”キーでメールの本文、”Filename”キーで添付ファイル名にアクセスできます。またメールの本文はContent-TypeがText/Plainで添付ファイルが無い場合に限りutf-8形式にエンコードされます。Content-Typeがmultipartの場合は”Is-Multipart”キーがtrueになり、”Body”キーの要素が辞書オブジェクトの配列になります。

上記のジョブフローを一部修正して、メールの表題が”DOWN”であった場合には、指定のサーバーのプロセスを再起動するジョブフローを呼び出すようにしてみます。

「プロセス再起動」は「ジョブフローから別のジョブフローを呼び出す」で作成したジョブフローをそのまま使いましたが、もちろん他の処理を記述していただいても構いません。(関係者への通知、チケットシステムへの投稿、予備系への切り替えなど)

 
ジョブフローの常駐化

上記で作成したジョブフローはメールを1通処理して終了となりますが、これを継続的に行なえるように変更してみましょう。
繰り返しの処理を指定するためにwhileブロックを使用し、あわせて何らかの原因で受信処理に異常が発生した場合でも全体が強制終了しないように、tryブロックを追加します。

このジョブフローを実行して、メールを指定のアドレスに送信すると、以下のような結果となります。このジョブフローは無限ループとしているので、停止させる場合は手動で「中止」ボタンをクリックする必要があります。 (プロセスが実行中であるかどうかはKompira画面上部の「プロセス一覧」メニューで確認することができます。)

メール受信処理

メールチャネルを利用する際、ポーリング処理でメールを取り込んだ後は、メールサーバー上から該当のメールが削除されることに注意してください。今回の記事で紹介したようなメール連携を行う場合、連携処理専用のアカウントをメールサーバーに作成し、そのアドレスに対してメールを送信することを推奨しています。