メール受信をslackに通知する

こんにちは。

メールを受信したら slack に通知したいケースってありますよね? 今回は、メール送信がエラーになった場合に受信するバウンスメールを Slack に連携してみたいと思います。

Customers Mail Cloud の Webhook 機能と Amazon API Gateway 、AWS Lambda を利用して メール送信エラーをリアルタイムで、Slack に通知します。

f:id:ryota0811:20180402172900p:plain

1. Slack Inbound Webhook

まず始めに、 Slack にエンドポイントを作成します。 Slack にログイン後、メニューから「Customize Slack」を選択すると カスタマイズ画面に遷移します。 後は、「Configure Apps」を選択し、inbound Webhook を設定します。

f:id:ryota0811:20180402173541p:plain

2. AWS Lambda

次に AWS Lambda を設定します。 「関数の作成」→「一から作成」として、 名前を cmc2slack。ランタイムを Node.js 6.10 としました。

f:id:ryota0811:20180402175826p:plain

続いて、トリガーの選択です。 こちらは、 API gateway をドラック&ドロップするだけです。

f:id:ryota0811:20180402180124p:plain

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 *

f:id:ryota0811:20180402182104p:plain

3. Amazon API Gateway

Amazon API Gateway を設定します。 「メソッドの作成」→統合タイプ「Lambda」/ Lambda関数に「cmc2slack」を選択します。

f:id:ryota0811:20180402183119p:plain

Customers Mail Cloud の Webhook は、application/x-www-form-urlencoded形式で Postするため、本文マッピングテンプレートを編集します。

f:id:ryota0811:20180402184149p:plain

最後にURLを公開します。 (URLをメモしておきます)

f:id:ryota0811:20180402184735p:plain

4. Customers Mail Cloud

最後に Customers Mail Cloud の設定となります。 管理画面にログイン後、「MENU」→「API設定」→「Webhook」と進みます。

※「Webhook」には、イベントと、インバウンドがありますが、ステータスの通知は、 イベントとなります。

通知先に API Gateway で払い出した URL を入力。 イベントは、「Bounced」にチェックを入れます。

f:id:ryota0811:20180402190213p:plain

設定をメールサーバに反映します。 管理コンソールの画面右上にある「MENU」→「サーバ構成」をクリックします。 操作対象のサーバ構成の操作欄から「設定反映」ボタンをクリックします。

以上で設定完了です。

実際にエラーメールを送信してみると無事に Slack に表示されました。

f:id:ryota0811:20180402191329p:plain

※上記の画像に出てますが、Zapier を用いても実現できます。