Twilio SendGridでNode.jsを使いEメールを簡単に送信(SMTP編)

March 11, 2022
執筆者
レビュー担当者

Send Email in Node.js Using SMTP with Twilio SendGrid JP

この記事はDhruv Patelこちらで公開した記事(英語)を日本語化したものです。

アプリケーション開発におけるメールサービスに関して言えば、Twilio SendGridなどのクラウド側でホストされているメールAPIを使用し、ニーズに合わせて設定をカスタマイズするとよいでしょう。ただし、既存のプラットフォームでSMTP(Simple Mail Transfer Protocol)がすでに有効な場合は、広く普及しているメール標準であるSMTP経由でメールを送信する方法を採用したい場合もあるでしょう。幸いなことに、Twilio SendGridではSMTPリレーサービスを提供していますので、自前のサーバーをセットアップする必要はありません。また、これまでどおり、詳細なメトリクス、分析のトラッキング、優れた配信率の恩恵を受けることができ、X-SMTPAPIヘッダーを介してSendGridの多くの機能も利用できます。

このチュートリアルでは、Node.jsとTwilio SendGridのSMTPリレーを使ってメールを送信する方法について説明します。

SendGridとの連携にWeb APIとSMTPリレーのどちらを使用するかを選択できる場合は、できるだけWeb APIを使用してください。SMTPでは、サーバーとクライアントの間で必要となるプロトコル処理が多いため、遅延が大きくなり、障害点が複数発生する可能性があります。詳細については、SendGridブログ「メールの配信方法: Web API vs SMTPリレー(英語)」をご確認ください。

Web APIを使用する方が高速で柔軟性が高いだけでなく、メールの送信という基本機能に加え、メールテンプレートメール検証マーケティングツールなどのあらゆるサービス機能を利用できる点もメリットです。SendGrid APIの機能一覧については、APIリファレンスをご確認ください。

SendGrid APIを使用したメール送信(Node.js編)への切り替え、導入を検討している場合は、ブログ「JavaScript/Node.jsでSendGridを使用してメールを送信する方法(英語)」をご確認ください。

必要条件

  • Node.jsのインストール。
  • 無料のTwilio SendGridアカウント。こちらでサインアップすると、文字通り無料で1日に最大100件のメールを送信可能です。
  • 本稿で説明するプロジェクトを検証するためのメールアドレス。
  • Visual Studio Code、またはご希望のIDE。

SendGridの設定

SendGridの使用にあたり、送信側の身元の検証とAPIキーの生成の2つの初期設定作業を行います。

送信側の身元の検証

SendGridご利用のお客様は、送信側の身元として差出人アドレスを検証し、使用するメールアドレスの所有を確認することを求められます。送信側の身元は、ここでは「From」メールアドレスを表します。受信者には、このアドレスがメールの差出人として表示されます。

送信側の身元を検証する際、弊社の推奨はドメイン認証です。ただし、このチュートリアルでは、スピードアップのためにテスト用の単一差出人検証を完了することで済ませます。

SendGridにログインし、左側の設定タブに移動します。ドロップダウンをクリックし、[Sender Authentication](差出人認証)をクリックします。

tsg sender auth jp

[Sender Identity](送信側の身元)セクションで、[Verify a Single Sender](単一差出人を検証)ボタンをクリックし、表示されるフォームに自分の情報を入力します。

tsg create sender jp

フォームに入力した後、青色の [Create](作成)ボタンをクリックし、メールアドレスを検証するためのメールが受信ボックスに到着するのを待ちます。到着したメールを開き、リンク [Verify Single Sender] (単一差出人を検証する)をクリックすると、SendGridにリダイレクトされ、メールをすぐに使用できることが通知されます。

APIキーの生成

SendGridダッシュボードで、左側の設定タブの [API Keys](APIキー)をクリックし、APIキーセクションに移動します。

tsg api keys jp

右上の青色の [Create API Key] (APIキーの作成)ボタンをクリックすると、フォームが表示されます。

tsg create api keys jp

希望するAPIキーの名前を選択し、青色の [Create & View](作成と表示)ボタンをクリックします。

APIキーは、画面を閉じると2度と表示されません。APIキーをコピーし、安全な場所に保存します。

Node.jsアプリケーションの構築

メールアドレスを検証し、SendGridのAPIキーを取得し終えたら、アプリケーションの構築を開始しましょう。

ターミナルまたはコマンドプロンプトで、希望するディレクトリに移動し、プロジェクトを作成するための次のコマンドを実行します。

mkdir smtp-emails
cd smtp-emails
npm init -y

このコマンドは、プロジェクトファイルを作成してNode.jsプロジェクトをスキャフォールディングするために、プロジェクトのメタデータとパッケージ依存関係を格納するpackage.jsonファイルを作成します。

次に、2つの依存関係(dotenvNodemailer)をインストールします。dotenvは、環境変数を保存するために使用され、Nodemailer(最も一般的なNode.jsメールパッケージ)は、SMTP経由でメールを送信するために使用されます。これらの依存関係をインストールするには、ターミナルで次のコマンドを入力します。

npm i dotenv nodemailer

SendGrid APIキーを保存するには、同じディレクトリに.envという名前のファイルを作成し、以下のステートメントを含めます。XXXXXXプレースホルダーは実際のAPIキーに置き換えます。

SENDGRID_API_KEY=XXXXXX

ここで、同じディレクトリにindex.jsというファイルを作成し、次のコードを追加します。

require('dotenv').config();
const nodemailer = require("nodemailer");

let transporter = nodemailer.createTransport({
   host: 'smtp.sendgrid.net',
   port: 587,
   auth: {
       user: "apikey",
       pass: process.env.SENDGRID_API_KEY
   }
})

このコードは、nodemailerを初期化し、.envファイルから環境変数をインポートします。次に、指定されたサーバーホスト、ポート番号、認証データに基づいてtransporterを作成します。

SMTPリレー用のSendGridのサーバーホストはsmtp.sendgrid.netで、推奨ポートは587です。

ポート587は、非暗号化接続またはTLS接続に使用されます。別のポートを使用する場合や、使用するポートが分からない場合は、こちらをご確認ください。

認証データとしては、ユーザー名とパスワードを指定する必要があります。SendGrid SMTPサーバーと接続する場合、ユーザー名は「apikey」、パスワードは実際のAPIキーになります。SendGridは、指定されたAPIキーを使用し、SendGridアカウントと接続します。このアカウントにより、送信されたメールを追跡して表示できます。

次のコードをtransporterの下に追加します。

transporter.sendMail({
   from: "SENDER_EMAIL", // verified sender email
   to: "RECIPIENT_EMAIL", // recipient email
   subject: "Test message subject", // Subject line
   text: "Hello world!", // plain text body
   html: "<b>Hello world!</b>", // html body
 }, function(error, info){
   if (error) {
     console.log(error);
   } else {
     console.log('Email sent: ' + info.response);
   }
 });

 この最後のコードチャンクでは、transporterを使用し、指定されたメッセージ設定の下にメールを送信します。次いで、メールの送信結果をログに記録します。

X-SMTPAPIヘッダー

また、"header"プロパティのヘッダーをメッセージ設定に渡すこともできます。SendGridのSMTPサービスを使用すると、X-SMTPAPIというヘッダーを介して、必要な数のSMTPオブジェクトを含むJSON文字列をSendGridに渡すこともできます。このヘッダーを介して、SendGridの機能(フィルタースケジュール送信置き換えタグなど)をSMTPメールに組み込むことができます。詳細については、SendGridドキュメントの「X-SMTPAPIヘッダーの構築」やSendGridのSMTPAPIヘルパーライブラリー(Node.js版)をご確認ください。

SMTP経由のメール送信

コードを実行する前に、SENDER_EMAIL(送信者メールアドレス)とRECIPIENT_EMAIL(受信者メールアドレス)のプレースホルダーを、実際のメールアドレスに各々変更してください。

最後に、ファイルを保存し、ターミナルに戻り、次のコマンドを実行します。

node index.js

コンソールログで、メールが送信されたことと、SMTPレスポンスコード250であることを確認してください。このコードは、メールが正常に送信され、受信者に配信されたことを示します。

受信者のメール受信ボックスをチェックし、作成したコードを介してメールが送信されていることを確認します。

次のステップ

Node.jsを使用してSMTP経由で正常にメールを送信できたことと思います。SendGridのSMTPリレーを使用すると、SendGridの機能を損なわずに、既存のSMTPサーバーをSendGridのサーバーに容易に切り替えることができます。

次のステップとして、SendGridのX-SMTPAPIヘッダーを介して専用のIPアドレスプール配信停止グループ、スケジュール送信等の機能をすべてお試しいただけます。

Dhruv Patel: TwilioのDeveloper Voicesチーム所属の開発者。コーヒーショップで水出しコーヒーを飲みながら仕事している彼を見つけるか、dhrpatel [at] twilio.comまたはLinkedInまでお問い合わせください。