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!📧


