Twilio SendGridとNode.jsでメールを一斉送信する3つの方法
- 2020年5月29日
- by SendGrid
- Category: 技術ネタ 機能・使い方
この記事は Sending Bulk Emails 3 Ways With Twilio SendGrid And Node.js の抄訳です。
メール配信のメリットの一つは、一度に多くの人たちへ情報を届けられることです。この記事では、SendGridでNode.jsを用いて一斉配信を行う方法を3つご紹介します。皆さんがNode.jsも使えるドーナツ屋の店主だったとして、メール配信を希望するお客さんにドーナツの焼き上がりを知らせてみましょう。
必要なツール
- Node.jsおよびnpm
- SendGrid無料アカウント(新規会員登録はこちらから)
- 動作確認用のメールアカウント(少なくとも2つ。異なるGmailアカウント2つでも良いです。)
最初に、SendGridのダッシュボードからAPIキーを作成します。ここでは「bulk email」という名前をつけます。
「Create & View」ボタンをクリックすると、APIキーの文字列が表示されます。これをSENDGRID_API_KEYという名前で環境変数に設定しましょう。セキュリティ上の理由から、一度画面を閉じるとAPIキーを確認することができなくなるので注意してください。
新しいNode.jsプロジェクトを作成するためnpm initコマンドを実行後、npm install @sendgrid/mailを実行してSendGridヘルパーライブラリをインストールします。index.jsというファイルを作り、好きなエディタで開きます。
方法1:sendMultiple
一斉配信を行うのに最も手っ取り早いのは、宛先アドレスの配列をtoフィールドに指定した上で、単一のメッセージオブジェクトを引数にしてsendMultiple関数を呼び出す方法です。
以下のコードをindex.jsにコピー&ペーストして、to配列を宛先アドレスに置き換えてください。
const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(process.env.SENDGRID_API_KEY); const msg = { to: ['example1@mail.com', 'example2@mail.com'], // replace these with your email addresses from: 'Sadie Miller <sadie@thebigdonut.party>', subject: '🍩 Donuts, at the big donut 🍩', text: 'Fresh donuts are out of the oven. Get them while they’re hot!', html: '<p>Fresh donuts are out of the oven. Get them while they’re <em>hot!</em></p>', }; sgMail.sendMultiple(msg).then(() => { console.log('emails sent successfully!'); }).catch(error => { console.log(error); });
ターミナル上でnode index.jsコマンドを実行すると、コンソール上でスクリプトの実行結果が出力され、以下のようなメールが受信箱に届くはずです。
Web APIの一回のリクエストで送ることができる宛先の上限は1000件です。もしドーナツ屋のスループット・スケーラビリティ・耐障害性がSendGridに引けをとらず、1000を超えるお客さんに一度にメールを送りたいと言うのなら、複数回リクエストを行ってください。
sgMail.sendMultipleを使用して送信したら、受信者は他の受信者のメールアドレスを見ることはありません。もし受信者が互いのメールアドレスを確認できるようにしたかったら、上のコードのsgMail.sendMultipleをsgMail.sendに置き換えてください。とは言え、よほどの理由がない限りは、他の受信者のメールアドレスを見えるようにすべきではありません。
方法2:パーソナライズ
やり手のドーナツ屋店主である皆さんは、お客さま一人ひとりへの気遣いを怠りません。その中で、スティーブンがベーコンドーナツをこよなく愛していることに気づきました。
personalizationsを使えば宛先ごとにメールのカスタマイズが可能なので、お客さんの好きなドーナツをタイトルに忍ばせて気を引くこともできます。
index.jsの中身を以下に入れ替えてください。
const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(process.env.SENDGRID_API_KEY); const msg = { personalizations: [ { to: 'example1@mail.com', // replace this with your email address subject: 'Did somebody say BACON DONUTS?? 🥓🥓🥓', }, { to: 'example2@mail.com', // replace this with your email address } ], from: 'Sadie Miller <sadie@thebigdonut.party>', subject: '🍩 Donuts, at the big donut 🍩', text: 'Fresh donuts are out of the oven. Get them while they’re hot!', html: '<p>Fresh donuts are out of the oven. Get them while they’re <em>hot!</em></p>', }; sgMail.send(msg).then(() => { console.log('emails sent successfully!'); }).catch(error => { console.log(error); });
node index.jsコマンドで送信テストを行いましょう。
タイトルをパーソナライズしていない宛先には、デフォルトのタイトルで送信されます。一通はベーコンドーナツ、もう一通はデフォルトのタイトルのメールが届いているはずです。
personalizations APIではタイトルを変える以外にもいろいろなことができます。以下にカスタマイズ可能な属性を挙げます。
- subject – メールのタイトルを変える
- headers – メールのヘッダを変える
- substitutions – キーと値のペアを指定し、メールのタイトルやボディ内にあるキーを値に変換する
- custom_args – substitutionsの置換を受けないメールごとのカスタム値を指定する
- send_at – メールの送信時刻をUNIXタイムスタンプで指定する
方法3:メッセージオブジェクト配列
複数の宛先それぞれに異なる件名や本文のメッセージを送信する場合、メッセージオブジェクト配列が有効です。.send関数はメッセージオブジェクトの配列を受け取ることができます。
const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(process.env.SENDGRID_API_KEY); const messages = [ { to: 'example1@mail.com', // replace this with your email address from: 'Sadie Miller <sadie@thebigdonut.party>', subject: 'We miss you 😭', text: 'Get 10% off with coupon code NOMNOMNOM', html: '<p>Get 10% off with coupon code <b>NOMNOMNOM</b></p>', }, { to: 'example2@mail.com', // replace this with your email address from: 'Lars Barriga <lars@thebigdonut.party>', subject: 'NEW! Ube rolls 😻', text: 'In addition to donuts, we are now selling ube rolls.', html: '<p>In addition to donuts, we are now selling ube rolls.</p>', }, ]; sgMail.send(messages).then(() => { console.log('emails sent successfully!'); }).catch(error => { console.log(error); });
このコードを実行すると、それぞれの宛先に以下のメールが届くはずです。
まとめ
今日やったことを振り返りましょう。
- 複数の宛先に一斉送信する
- personalizationsを用いて、複数の宛先に対してカスタマイズしたメールを送る
- メッセージオブジェクト配列を用いて、複数の宛先にそれぞれ異なるメールを送る
よくできました!自分にご褒美をあげましょう🎉 え、ドーナツが食べたくなったって?それは私のせいではありません🍩
SendGridのAPIはできないことがないほど機能が充実していて、ブログ記事ひとつに全てを詰め込むのは到底無理です。最新の情報は、公式ドキュメントをチェックしてください。GitHubで公開しているオープンソースのNode.jsライブラリもお見逃しなく。
最後までお読みいただきありがとうございました。Happy Emailing!📧