RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

知ってる?nodemailerを使ってメールを送る方法

はじめに

はじめまして。新卒入社で3年目のNIR-AMAUQAです。
今回は少し前に触ったnodemailerについて記事を書こうと思います。
具体的にはnode.jsからnodemailerというモジュールを使って、メールを送信してみようと思います。

以前nodemailerを触る機会があったんですが、調査している時に日本語の資料が少なかったり、
見つけても古いバージョンのものが多かったので、記事にしてみようと思いました。

node.jsについて分からない人はこちらをどうぞ

Node.js を5分で大雑把に理解する - Qiita

いまアツいJavaScript!ゼロから始めるNode.js入門〜5分で環境構築編〜

nodemailerとは

2010年から作られているnode.jsからメール送信を可能にするモジュールで、多くのユーザに利用されています。
ソフトウェアのライセンスはMITです。

Nodemailer :: Nodemailer

目次

nodemailerをインストール

では早速、nodemailerをインストールしたいと思います。
npmでインストールする際にモジュール名のみだと最新版をインストールします。

$ npm install nodemailer

グローバルの場合は

$ npm install nodemailer -g

インストールの確認

$ npm list --depth=0

以下のように表示されていれば成功(2017/09/06 時点での最新が4.1.0です。)

nodemailer@4.1.0

グローバルの場合は上記のコマンドと同じく末尾に-gを入れて下さい。

もし過去バージョンをインストールしたい場合は以下の書き方でバージョンを指定できます。
@の後ろにバージョン番号を書いてください。

$ npm install nodemailer@4.0.1

サンプルプログラムを作成

//モジュールの読み込み
var nodemailer = require("nodemailer");

//SMTPサーバの設定
var smtp = nodemailer.createTransport({
    host: 'localhost',
    port: 25
});

//メール情報の作成
var message = {
    from: 'Fromアドレス',
    to: 'Toアドレス',
    subject: 'nodemailer test mail',
    text: 'テストメールです。'
};

// メール送信
try{
    smtp.sendMail(message, function(error, info){
        // エラー発生時
        if(error){
            console.log("send failed");
            console.log(error.message);
            return;
        }
        
        // 送信成功
        console.log("send successful");
        console.log(info.messageId);
    });
}catch(e) {
    console.log("Error",e);
}

詳細説明

SMTPサーバ設定
//SMTPサーバの設定
var smtp = nodemailer.createTransport({
    host: 'localhost',
    port: 25
});

ここでSMTPサーバの設定を行います。
今回はローカルのメールサーバを利用した最も簡単な例です。

nodemailerの記事で探すとGmailなどのSMTPサーバを利用しているものが多いので、
外部のSMTPサーバを利用したい方はそちらを参考にしてください。

nodemailerでGmailから送信するための方法 - Qiita

メールヘッダ作成
//メール情報の作成
var message = {
    from: 'Fromアドレス',
    to: 'Toアドレス',
    subject: 'nodemailer test mail',
    text: 'テストメールです。'
};

こちらも最もシンプルなメールヘッダの例になります。

私の調べた限りではReturn-Pathの設定はできないようです。
ただし、envelopeの設定はできるのでバウンスメールなどをコントロールしたい場合は以下のようにすれば可能です。

//メール情報の作成
var message = {
    from: 'Fromアドレス', // 表示名つきにする場合は'表示名<Fromアドレス>'
    to: 'Toアドレス',
  envelope: {
        from: 'envelopeFromアドレス',  // バウンスメールの戻り先アドレス
        to: 'envelopeToアドレス'    // 実際の送信先
    },
    subject: 'nodemailer test mail',
    text: 'テストメールです。'
};

envelopeを付与した場合はto: 'Toアドレス'はなくても送信可能ですが、メールヘッダのToが無くなってしまうので書いておくのが無難かと思います。

メール送信処理
// メール送信
try{
    smtp.sendMail(message, function(error, info){
        // エラー発生時
        if(error){
            console.log("send failed");
            console.log(error.message);
            return;
        }

        // 送信成功
        console.log("send successful");
        console.log(info.messageId);
    });
}catch(e) {
    console.log("Error",e);
}

メッセージの送信に失敗するとerrorオブジェクトが返ってきます。
送信先を消してメール送信に失敗した場合の例

$ node サンプルファイル名.js  
send failed
No recipients defined

メール送信に成功すると様々な情報が返されます。
公式のリファレンスによれば以下の情報が返されているそうです。

  • info.messageId
  • info.envelope
  • info.accepted
  • info.rejected
  • info.pending
  • response

英語が苦手な私が訳すと誤解させる恐れがありますので詳しくは公式のリファレンス*1で確認お願いします。

実行してみる

以下のようになればメール送信成功です。

$ node サンプルファイル名.js  
send successful
<Message-IDが出力されている>

まとめ

今回はnode.jsにnodemailerを入れてメールを送信してみました。
想定していたよりも手軽にメール送信できました。

node.jsのモジュールに関して日本語の記事が増えてくれると嬉しいので、
私のために記事を書いてくれると嬉しいです。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.