Twilio SendGridとNode.jsでメールを一斉送信する3つの方法

Twilio SendGridとNode.jsでメールを一斉送信する3つの方法

この記事は 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」という名前をつけます。

APIキーの作成

「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コマンドを実行すると、コンソール上でスクリプトの実行結果が出力され、以下のようなメールが受信箱に届くはずです。

Donuts,at the big donut

Web APIの一回のリクエストで送ることができる宛先の上限は1000件です。もしドーナツ屋のスループット・スケーラビリティ・耐障害性がSendGridに引けをとらず、1000を超えるお客さんに一度にメールを送りたいと言うのなら、複数回リクエストを行ってください。

sgMail.sendMultipleを使用して送信したら、受信者は他の受信者のメールアドレスを見ることはありません。もし受信者が互いのメールアドレスを確認できるようにしたかったら、上のコードのsgMail.sendMultiplesgMail.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コマンドで送信テストを行いましょう。

Did somebody say BACON DONUTS??

タイトルをパーソナライズしていない宛先には、デフォルトのタイトルで送信されます。一通はベーコンドーナツ、もう一通はデフォルトのタイトルのメールが届いているはずです。

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);
});

このコードを実行すると、それぞれの宛先に以下のメールが届くはずです。

We miss you

NEW! Ube rolls

まとめ

今日やったことを振り返りましょう。

  • 複数の宛先に一斉送信する
  • personalizationsを用いて、複数の宛先に対してカスタマイズしたメールを送る
  • メッセージオブジェクト配列を用いて、複数の宛先にそれぞれ異なるメールを送る

よくできました!自分にご褒美をあげましょう🎉 え、ドーナツが食べたくなったって?それは私のせいではありません🍩

SendGridのAPIはできないことがないほど機能が充実していて、ブログ記事ひとつに全てを詰め込むのは到底無理です。最新の情報は、公式ドキュメントをチェックしてください。GitHubで公開しているオープンソースのNode.jsライブラリもお見逃しなく。

最後までお読みいただきありがとうございました。Happy Emailing!📧

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。