ニフティクラウドmobile backendを使ってスマホアプリからメールを送信する方法

2016年3月1日、ニフティクラウドmobile backendスクリプト機能(※)がリリースされました。この機能を利用すると、サーバサイドでNode.jsベースの実行環境を利用できるようになります。今回は、この機能を利用してスマホアプリからメールを送信する方法をご紹介します。

※2016年3月時点ではお試し版。4月1日から正式版をリリース予定。

はじめに

mobile backendは、いわゆるmBaaS(mobile Backend as a Service)です。Webアプリやスマホアプリの開発において、(特にサーバ側で)必要となる次のような機能を提供しています。

  • プッシュ通知
  • 会員管理・認証
  • SNS連携
  • データストア
  • ファイルストア
  • 位置情報検索
  • スクリプト

また、次のプラットフォームをサポートしています。

  • Android
  • iOS
  • JavaScript
  • Monaca
  • Unity

例えば、AndroidやiPhone上のスマホアプリで発生したイベントをトリガとしてメールを送信する場合、技術的にはスマホアプリからSendGridのAPIを直接コールして送信することもできますが、認証情報をアプリ内に埋め込むことはセキュリティ的にNGです。こういったケースでは、サーバサイドの実装が必要になります。今回新たにリリースされたスクリプト機能を利用することで、サーバサイドにメール送信機能を実装し、スマホアプリからmobile backendのSDKを通じて呼び出します。こうすることで、安全にコードを実行できます。

準備

今回はAndroid版サンプルアプリにメール送信機能を追加します。事前に次のものが必要になります。

スクリプトの実装

まず、mobile backend上で実行されるスクリプトの実装から始めます。テキストエディタで次のようなsendmail.jsファイルを作成します。次の箇所は環境に合わせて編集してください。

  • YOUR_API_KEY:SendGridのAPI Key(Mail SendへのFULL ACCESSパーミッションが必要)
  • RECIPIENT_ADDRESS:宛先アドレス。今回はクライアントサイドのイベントを管理者向けに通知する想定です。
  • FROM_ADDRESS:送信元アドレス
module.exports = function(req, res) {
  var apiKey = 'YOUR_API_KEY';
  var to = 'RECIPIENT_ADDRESS';
  var from = 'FROM_ADDRESS';
  var data = 'to=' + to + '&from=' + from + '&subject=' + req.body.username + 'より伝言&text=ウサギさん、アヒルさんは後方をお願いします。カバさんと我々あんこうチームは、引き続きフラッグ車を攻撃します。&html=<html><body>ウサギさん、アヒルさんは後方をお願いします。カバさんと我々あんこうチームは、引き続きフラッグ車を攻撃します。</body></html>';
  var request = require('superagent');
  request
   .post('https://api.sendgrid.com/api/mail.send.json')
   .set('Authorization', 'Bearer ' + apiKey)
   .send(data)
   .end(function(err, response) {
       res.status(response.status).json(response.body);
     }
   );
}

スクリプトのアップロード

次に、先ほど実装したスクリプトをmobile backend上にアップロードします。管理コンソールにログインしてアップロード先のアプリを選択した後、スクリプトメニューを選択して「アップロード」ボタンを選択します。
スクリプトのアップロード

アップロード画面上にファイルをドラッグして、メソッドとファイルの状態、パーミッションを設定後、「アップロードする」ボタンを選択してアップロードを行います。アップロード完了後は、ダッシュボード上でスクリプトを実行して動作確認することをお勧めします。
スクリプトの設定

mobile backendのAPIキー確認

mobile backendのAPIキーはアプリ設定から確認できます。ここで確認したAPIキーはAndroidアプリでSDKの初期化に使用します。
mobile backendのAPIキー確認

Androidアプリの実装

次に、Androidアプリにスクリプトの呼び出し実装を追加していきます。ボタン(下の例ではhoge)のonClickイベントハンドラ内で、スクリプト名に”sendmail.js”、メソッドタイプにPOST、bodyにパラメータを指定してスクリプトを呼び出します。

hoge.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
       // NCMB Script
       NCMBScript script = new NCMBScript("sendmail.js", NCMBScript.MethodType.POST);
       Map<String, String> params = new HashMap<String, String>();
       params.put("username", "みぽりん");
       JSONObject body = new JSONObject(params);
       script.executeInBackground(null, body, null, new ExecuteScriptCallback() {
           @Override
           public void done(byte[] result, NCMBException e) {
               try {
                   if (e != null) {
                       Log.e("SendGridExample", e.getMessage(), e);
                       return;
                   }
                   if (result != null) {
                       Log.i("SendGridExample", new String(result, "UTF-8"));
                   }
               } catch (UnsupportedEncodingException ue) {
                   Log.e("SendGridExample", ue.getMessage(), ue);
               }
           }
       });
   }
});

動作確認

Androidサンプルアプリを実行してスクリプト呼び出し処理を実装したボタンをクリックすると、mobile backendのスクリプト経由で宛先にメールが送信されます。
Androidアプリ画面
メールイメージ

さいごに

mobile backendのようなmBaaSを活用することでスマホアプリを組み込んだシステムに必要な基本機能の実装を大幅に省略することができます。また、今回追加されたスクリプト機能はmobile backendを拡張する非常に強力な機能です。ぜひお試しください!