この記事は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](差出人認証)をクリックします。
[Sender Identity](送信側の身元)セクションで、[Verify a Single Sender](単一差出人を検証)ボタンをクリックし、表示されるフォームに自分の情報を入力します。
フォームに入力した後、青色の [Create](作成)ボタンをクリックし、メールアドレスを検証するためのメールが受信ボックスに到着するのを待ちます。到着したメールを開き、リンク [Verify Single Sender] (単一差出人を検証する)をクリックすると、SendGridにリダイレクトされ、メールをすぐに使用できることが通知されます。
APIキーの生成
SendGridダッシュボードで、左側の設定タブの [API Keys](APIキー)をクリックし、APIキーセクションに移動します。
右上の青色の [Create API Key] (APIキーの作成)ボタンをクリックすると、フォームが表示されます。
希望するAPIキーの名前を選択し、青色の [Create & View](作成と表示)ボタンをクリックします。
APIキーは、画面を閉じると2度と表示されません。APIキーをコピーし、安全な場所に保存します。
Node.jsアプリケーションの構築
メールアドレスを検証し、SendGridのAPIキーを取得し終えたら、アプリケーションの構築を開始しましょう。
ターミナルまたはコマンドプロンプトで、希望するディレクトリに移動し、プロジェクトを作成するための次のコマンドを実行します。
mkdir smtp-emails
cd smtp-emails
npm init -y
このコマンドは、プロジェクトファイルを作成してNode.jsプロジェクトをスキャフォールディングするために、プロジェクトのメタデータとパッケージ依存関係を格納するpackage.jsonファイルを作成します。
次に、2つの依存関係(dotenvとNodemailer)をインストールします。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
です。
認証データとしては、ユーザー名とパスワードを指定する必要があります。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までお問い合わせください。