Node.jsでのメール送信ガイド | SMTP、sendmail、SendGrid対応

Node.jsを使用したアプリケーションを開発しており、メール送信が必要になる場合があると思います。

  • ユーザー登録と確認
  • パスワードリセット
  • 通知やリマインダー
  • ニュースレター

ユーザー確認などは典型で、本来誰がアクセスしたのか判別が出来ない状態から自分自身であるという事を証明するためにはなくてはならない機能です。

なによりもメールは広く普及しており、オープンソースのプロトコルなので倒産リスクがある企業のアプリケーションに頼る事が無い認証方法が実現できます。

今回は Node.js で作成しているアプリケーションでユーザー確認であったり、管理者への通知やリマインダーに使用できるメール送信機能を実装する方法を解説していきます。

SMTPでのメール送信

Node.jsを使用してメールを送信するためには、通常はサードパーティのライブラリを使用します。以下では、Nodemailerという人気のあるライブラリを使ったメール送信の手順を説明します。

https://nodemailer.com/about/

$ npm install nodemailer
const nodemailer = require('nodemailer');

// 送信元のSMTP情報
const transporter = nodemailer.createTransport({
  host: "smtp.forwardemail.net",
  port: 465,
  secure: true,
  auth: {
    user: 'REPLACE-WITH-YOUR-ALIAS@YOURDOMAIN.COM',  // 送信元のユーザー
    pass: 'REPLACE-WITH-YOUR-GENERATED-PASSWORD' // 送信元のパスワード
  }
});

// 送信先の設定
const mailOptions = {
  from: 'your@gmail.com', // 送信元のメールアドレス
  to: 'recipient@example.com', // 送信先のメールアドレス
  subject: 'Test Email', // メールの件名
  text: 'This is a test email sent from Node.js.', // メールの本文
};

(async () => {
  // メール送信
  const info = await transporter.sendMail(mailOptions);

  console.log("Message sent: %s", info.messageId);
})();

上記でメール送信が行えます。

これで、Node.jsを使用してメールを送信する基本的な手順がわかるかと思います。

他にもHTMLメールの送信であったり、ファイル挿入を行う事もできます。

必要に応じて、Nodemailerのドキュメントを参照して詳細な設定やオプションを調べて実装していきましょう。

sendmailでのメール送信方法

SMTPを使用せずとも、Node.js を実行しているサーバーに sendmail コマンドが組み込まれていれば、システムの sendmail コマンドを使用してメール送信をする事が出来ます。

上記で紹介したNodemailerを使用してメールを送信する事ができるので、こちらの実装で可能になります。

https://nodemailer.com/transports/sendmail/

let transporter = nodemailer.createTransport({
    sendmail: true,
    newline: 'unix',
    path: '/usr/sbin/sendmail'
});
transporter.sendMail({
    from: 'sender@example.com',
    to: 'recipient@example.com',
    subject: 'Message',
    text: 'I hope this message gets delivered!'
}, (err, info) => {
    console.log(info.envelope);
    console.log(info.messageId);
});

前述のSMTPではasync/awaitを使用していましたが、コールバック関数でも実装が可能です。

SMTPやsendmail以外にも AWS SES等に対応しています。

Built-in transports

  • sendmail – for piping messages to the sendmail command
  • SES – is a Nodemailer wrapper around aws-sdk to send mail using AWS SES
  • stream – is just for returning messages, most probably for testing
https://nodemailer.com/transports/

SendGrindでのメール送信方法

SendGridは、メール送信用のクラウドベースのプラットフォームで、SMTP等のメール送信サーバーを用意する事なくメールを送る事が出来ます。

以下は、SendGridを使用してメールを送信する手順です。

  1. SendGridのアカウント作成とAPIキーの取得
    • まず、SendGridの公式ウェブサイトにアクセスしてアカウントを作成し、APIキーを取得します。APIキーは、SendGridのAPIを使用するための認証情報です。
  2. SendGridのNode.jsライブラリのインストール
    • プロジェクトフォルダ内でターミナルを開き、以下のコマンドを使用してSendGridのNode.jsライブラリをインストールします。
npm install @sendgrid/mail

以下は、SendGridを使用してメールを送信する基本的なコード例です。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey('YOUR_SENDGRID_API_KEY');

const msg = {
  to: 'recipient@example.com', // 送信先のメールアドレス
  from: 'sender@example.com', // 送信元のメールアドレス
  subject: 'Test Email', // メールの件名
  text: 'This is a test email sent using SendGrid and Node.js.', // メールの本文
};

sgMail.send(msg)
  .then(() => {
    console.log('Email sent successfully');
  })
  .catch((error) => {
    console.error('Error:', error);
  });

上記のコードで、'YOUR_SENDGRID_API_KEY'の部分を取得したSendGridのAPIキーに置き換えてください。

SendGridを使用することで、添付ファイルの送信やHTML形式のメールなど、さまざまな高度な機能を活用できます。SendGridのドキュメントやガイドを参照して、詳細な設定やオプションを学ぶことができます。