NCMBに用意されているスクリプトは、サーバーサイドで実行するコードをクラウド上で実行できる機能です。Node.jsとRubyのコードをクラウド上で実行し、結果を取得できます。
主にガチャのようなクライアントに記述したくないコードを実行したり、APIキーを使ったアクセスなどで活用できます。今回はメール送信サービスのSendGridを使って、スクリプトでメール送信を実装します。
必要なライブラリ
ネットワークアクセスを行う superagent
をインポートします。
const request = require('superagent');
URL、定数の定義
SendGridのAPIへリクエストするための変数を定義します。
- APIエンドポイントURL
- APIキー
// SendGrid用の設定
const SENDGRID_URL = 'https://api.sendgrid.com/v3/mail/send';
const API_KEY = 'YOUR_API_KEY';
リクエストに伴う処理
NCMBのスクリプトは、リクエストごとに以下の関数を実行します。
module.exports = async (req, res) => {
// この中に処理を書きます
}
HTTPヘッダーを作成
トークンを使ってHTTPヘッダーを作成します。
// ヘッダー
const headers = {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
}
リクエストボディを作成
今回はリクエストされた email
パラメーター宛にリクエストボディを作成します。また、 cc
と bcc
パラメーターで追加のメールアドレスを指定できます。
// リクエストボディから、SendGridのリクエストを作成
const { body } = req;
const data = {
'personalizations': [
{
'to': [
{
'email': body.email
}
],
'subject': 'テストメール from SendGrid',
}
],
'from': {
'email': 'info@devrel.dev'
},
'content': [
{
'type': 'text/plain',
'value': 'これはテストメールです'
}
]
};
if (body.cc) data.personalizations[0].cc = [{'email': body.cc}];
if (body.bcc) data.personalizations[0].bcc = [{'email': body.bcc}];
メール送信リクエストを行う
できあがったデータをSendGridのメール送信APIを呼び出します。レスポンスが202であればメール送信成功です。
try {
// SendGridへのリクエスト実行
const response = await request
.post(SENDGRID_URL)
.set(headers)
.send(data);
// レスポンスステータスで処理判別
if (response.statusCode === 202) {
res.send({});
} else {
res.send({error: `Send mail error: ${response.statusCode}`})
}
} catch (e) {
// 4xx / 5xx系の場合はこちら
res.send(e.response.body);
}
スクリプトからの呼び出し
スクリプトでは以下のように呼び出します。
await ncmb.Script
.exec('POST', 'sendmail.js') // スクリプト名は自分で決められます
.data({
email: 'info@example.com'
})
まとめ
SendGridはAPIキーを使って簡単にメール送信ができます。アプリからメール送信したり、お問い合わせなどに利用できるでしょう。
アプリにはプッシュ通知もありますが、メールもよく利用されます。メールが必要な際に、SendGridを利用してみてください。