Firebase

Cloud FunctionsとSendGridを使ってアプリ招待メールを送信する方法

Cloud FunctionsとSendGridを使ってアプリ招待メールを送信する方法

「特典コード付きの招待メールをアプリから送りたい」
「お問い合わせへの自動返信をしたい」

アプリ開発していると、上記のような要件が出てくることってありますよね。

FirebaseのCloud FunctionsとSendGridというサービスを使うことで、メール送信機能を実装できます。

この記事で解説すること
  1. メール配信サービス「SendGrid」の設定方法
  2. SendGridを使ってCloud Functionsでメールを送信する方法
  3. 実例付きのソースコード

ということでこんにちは、株式会社Playground Webシステム開発部の稲垣です!

Google Cloud Platformの公式ドキュメントにも「SendGridとCloud Functionsを使ってメールを送信する方法」が紹介されています。

ですが、情報が古くなっていて、現在は非推奨のNode.js 6のコードしか載っていません

Node.js 8以降で実装するために今回調べた内容を記事にまとめていきます。

この記事では、実例として「アプリの招待メールを送る」というコードを考えてみます。

Cloud Functionsからメール送信するためのSendGrid設定手順

SendGridはクラウドメール配信サービスです。

月に12,000通まで無料でメール送信できます
用途によりますが、十分な無料枠ですね!

Cloud FunctionsからSendGridのAPIを叩いてメールを送信するために、サービスに登録して各種設定を行う必要があります。

SendGridの設定手順
  1. アカウントの作成
  2. APIキーの取得
  3. Webhookの設定

SendGridの設定手順1|アカウントの作成

SendGridのAPIに登録します。

  • STEP01
    SendGridのサイトにアクセス
    こちらのサイトにアクセス
  • STEP02
    アカウント作成画面へ
    右上の[Start for Free]をクリック
    SendGridアカウント登録
  • STEP03
    アカウント情報を入力
    アカウント情報を入力して[Create Account]をクリック
  • STEP04
    認証
    メールが届くのでURLにアクセスして認証する

SendGridの設定手順2|APIキーの取得

SendGridのAPIを叩くためのAPIキーを取得します。

  • STEP01
    ログイン
    https://app.sendgrid.comからSendGridアカウントにログイン
  • STEP02
    メニュー選択
    左ペインから[Setting] > [API Keys]をクリック
  • STEP03
    APIキーを新規作成
    右上の[Create API Key]をクリックしてフルアクセス権で作成
  • STEP04
    APIキーをコピー
    APIキーが表示されたら1度しか表示されないので必ずコピーしておく!

APIキーは必ずコピーして、メモ帳かCloud Functionsのindexファイルに貼り付けておきましょう。

SendGridの設定手順3|Webhookの設定

Cloud Functionsから呼び出すWebhookを設定します。

  • STEP01
    メニュー選択
    左ペインから[Setting] > [Mail Settings]をクリック
  • STEP02
    リストから[Event Notification]を選ぶ
  • STEP03
    設定
    [edit]をクリックして設定していきます。
    HTTP POST URLを以下のように設定します。

    https://YOUR_USERNAME:YOUR_PASSWORD@YOUR_REGION.YOUR_PROJECT_ID.cloudfunctions.net/sendgridWebhook

    1. YOUR_USERNAME:任意のユーザー名を指定
    2. YOUR_PASSWORD:任意のパスワードを指定
    3. YOUR_REGION:Cloud Functionsがデプロイされているリージョンを指定します。デプロイ時のログに表示されます。
    4. YOUR_PROJECT_ID:FirebaseのプロジェクトIDを指定する
  • STEP04
    アクションの選択
    絞ってもいいですが、Allを選択でOKです。
  • STEP05
    有効化
    右上のチェックボタンをクリックした後、左の[ON]をクリック。
  • STEP06
    設定値確認
    以下のような設定値になっていることを確認してください。

以上でSendGrid側の設定は完了です。

Cloud FunctionsとSendGridを使ってメールを送信する方法

ここからが本題です。

Cloud Functionsのコードを書いていきましょう。

今回実装するメール送信機能の概要

まず、今回作るメール送信機能ですが「まだアプリを使っていない人へ、アプリ利用者から招待メールを送りたい」という要件を実装すると仮定します。

そのための仕様が以下の通りです。

招待メール送信機能の仕様
  1. アプリの招待画面で、招待者のメールアドレスと特典コードを入力する
  2. Firebaseのデータベースに入力されたデータが追加される
  3. データの追加をトリガーにCloud Functionsを呼び出してメールを送信する

それでは、これを実装するためのコードを書いていきましょう。

Cloud FunctionsとSendGridでメール送信するための準備

まず、Cloud FunctionsでSendGridを使うためにnpmでモジュールをインストールします。

functionsフォルダで以下のコマンドを実行してください。

npm install --save sendgrid @types/sendgrid @types/request

 

インストールが完了したら、index.ts内でモジュールを読み込みます。

functions/src/index.ts

import * as sendgrid from '@sendgrid/mail';

これで準備OKです。

【たった13行】Cloud Functionsでメールを送信するソースコード

まず、Realtime Databaseにデータが追加された時に発火するようにします。

functions/src/index.ts

exports.sendgridEmail = functions.database().ref('invitation/${id}')
    .onCreate(async (snapshot: any, context)=> {

APIキーを設定します。
YOUR_API_KEYにはSendGridの設定手順で作成したAPIキーを貼り付けましょう。

functions/src/index.ts

        const apiKey = "YOUR_API_KEY";
        sendgrid.setApiKey(apiKey);

送信するデータを作成してSendGridの送信メソッドを呼び出せばメールが送られます。

functions/src/index.ts

        const mailData = snapshot.val();
        const msg = {
            to: mailData.email,
            from: "YOUR_ADDRESS@YOUR.DOMAIN",
            subject: mailData.subject,
            html: mailData.html
        };
        await sendgrid.send(msg)

ファンクション全体のソースコードがこちら。
たった13行で実装できましたね!

functions/src/index.ts

exports.sendgridEmail = functions.database().ref('invitation/${id}')
    .onCreate(async (snapshot: any, context)=> {
        const apiKey = "YOUR_API_KEY";
        sendgrid.setApiKey(apiKey);
        const mailData = snapshot.val();
        const msg = {
            to: mailData.email,
            from: "YOUR_ADDRESS@YOUR.DOMAIN",
            subject: mailData.subject,
            html: mailData.html
        };
        await sendgrid.send(msg)
     return null

 

以上がCloud FunctionsとSendGridを使ってメールを送信する方法でした。

お問い合わせ対応の自動化やマーケティング施策など何にでも応用できると思うので、ぜひ活用してみてください。

ABOUT ME
稲垣 貴映
サーバーエンジニア兼Webフロントエンジニア。 新卒で独立系SIerに入社後、金融系システム基盤の構築・運用を3年間経験。 プログラミングを独学していた頃に、CEOの馬谷が開講していたSwiftスクールに通い、2019年9月に入社。 趣味はブラジル音楽の演奏。

POSTED COMMENT

  1. sanpei より:

    記事参考にさせていただいております。ありがとうございます。

    以下のコードはPythonではないでしょうか?
    import * as sendgrid from ‘@sendgrid/mail’;

    node.js(Clound Functions)ならば、以下だともいます確認ください。
    const sendgrid = require(‘@sendgrid/mail’);

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA