はじめに
はじめまして。新卒入社で3年目のNIR-AMAUQAです。
今回は少し前に触ったnodemailerについて記事を書こうと思います。
具体的にはnode.jsからnodemailerというモジュールを使って、メールを送信してみようと思います。
以前nodemailerを触る機会があったんですが、調査している時に日本語の資料が少なかったり、
見つけても古いバージョンのものが多かったので、記事にしてみようと思いました。
node.jsについて分からない人はこちらをどうぞ
いまアツいJavaScript!ゼロから始めるNode.js入門〜5分で環境構築編〜
nodemailerとは
2010年から作られているnode.jsからメール送信を可能にするモジュールで、多くのユーザに利用されています。
ソフトウェアのライセンスはMITです。
目次
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のモジュールに関して日本語の記事が増えてくれると嬉しいので、
私のために記事を書いてくれると嬉しいです。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com