こんにちは。
メールを受信したら slack に通知したいケースってありますよね? 今回は、メール送信がエラーになった場合に受信するバウンスメールを Slack に連携してみたいと思います。
Customers Mail Cloud の Webhook 機能と Amazon API Gateway 、AWS Lambda を利用して メール送信エラーをリアルタイムで、Slack に通知します。
1. Slack Inbound Webhook
まず始めに、 Slack にエンドポイントを作成します。 Slack にログイン後、メニューから「Customize Slack」を選択すると カスタマイズ画面に遷移します。 後は、「Configure Apps」を選択し、inbound Webhook を設定します。
2. AWS Lambda
次に AWS Lambda を設定します。 「関数の作成」→「一から作成」として、 名前を cmc2slack。ランタイムを Node.js 6.10 としました。
続いて、トリガーの選択です。 こちらは、 API gateway をドラック&ドロップするだけです。
Lambda の設定は完了ですが、slack へ通知するプログラムを書かなくてはいけません。 時間も無いので、さくっと slack が提供している SDK (Slack Developer Kit for Node.js) を利用しました。
まずは、開発機にインストールします。
# npm init -y # npm install @slack/client
index.js を編集します。
const { IncomingWebhook } = require('@slack/client'); const url = process.env.SLACK_WEBHOOK_URL || 'slackで払い出したURLをコピー'; const webhook = new IncomingWebhook(url); exports.handler = (event, context, callback) => { webhook.send('Bounce Email from CMC ['+JSON.stringify(event.bounces)+']', function(err, res) { if (err) { console.log('Error:', err); } else { console.log('Message sent: ', res); } }); };
編集後、zip圧縮し、AWS Lambda にアップロードします。
# zip -r slack.zip *
3. Amazon API Gateway
Amazon API Gateway を設定します。 「メソッドの作成」→統合タイプ「Lambda」/ Lambda関数に「cmc2slack」を選択します。
Customers Mail Cloud の Webhook は、application/x-www-form-urlencoded形式で Postするため、本文マッピングテンプレートを編集します。
最後にURLを公開します。 (URLをメモしておきます)
4. Customers Mail Cloud
最後に Customers Mail Cloud の設定となります。 管理画面にログイン後、「MENU」→「API設定」→「Webhook」と進みます。
※「Webhook」には、イベントと、インバウンドがありますが、ステータスの通知は、 イベントとなります。
通知先に API Gateway で払い出した URL を入力。 イベントは、「Bounced」にチェックを入れます。
設定をメールサーバに反映します。 管理コンソールの画面右上にある「MENU」→「サーバ構成」をクリックします。 操作対象のサーバ構成の操作欄から「設定反映」ボタンをクリックします。
以上で設定完了です。
実際にエラーメールを送信してみると無事に Slack に表示されました。
※上記の画像に出てますが、Zapier を用いても実現できます。