node.jsのいろいろなモジュール3 – Nodemailer
メール送信
今回ご紹介するモジュールは、メール送信のためのモジュールです。 このモジュールを使用すると、 node.js上から簡単にメールの送信ができます。 メールの送信方法は、SMTPを使用するか、sendmailを使用するかプログラム上で指定できるようになっています。 Nodemailerは以下のような特徴を持っています。
- Unicodeを使用可能
- テキストの他にHTMLメールも送信できる
- 添付ファイルが使用できる
- HTMLに画像埋め込みができる
- SSL/ TLSを使用して、セキュアなメール送信が可能
最低限必要な機能は揃っていますね。ではインストールして動かしてみましょう。 なお、本記事での動作確認環境は下記の通りです。
- OS : MacOS X 10.6.8
- Node.js : v0.4.8
- npm : 1.0.14
- nodemailer : 0.1.18
まずはnpmを使用してモジュールをインストールします。
$ npm install nodemailer
Nodemailerのソースはgithub上にあります。 こちらも参照してみてください。
次に、同じディレクトリにメール送信プログラムをmail.jsという名前で記述します。 メールを送信するには、send_email()メソッドを使うか、EmailMessageオブジェクトを使用します。 今回はsend_email()を使用してメールを送信してみましょう。 ※SMTPサーバーやアカウント等の設定情報は、適宜自分の使用できるものに置き換えてください
まずは今回のサンプルプログラム全文をごらんください。 github上のexampleにあるソースほぼそのまま使用しています。 このプログラムでは、添付ファイルをつけて画像を埋め込んだメールを送信しています。
//モジュールロード var nodemailer = require("nodemailer"); //埋め込み画像のファイル名に使用 var cid = Date.now()+".image.png"; //SMTPサーバーの設定 nodemailer.SMTP = { host: "something.smtp.com", port: 25, ssl: true, use_authentication: true, user: "your mail account", pass: "your mail password" }; //メール情報の作成 var message = { sender: 'Sender Name <yourmailaddress@mail.com>', to: '"Receiver Name" <receiveraddress@mail.com>', subject: "Nodemailer is unicode friendly ✔", body: "Hello to myself!", html:"<p><b>Hello</b> to myself <img src=\"cid:"+cid+"\"/></p>", debug: true, attachments:[ { filename: "notes.txt", contents: "Some notes about this e-mail" }, { filename: "image.png", contents: new Buffer("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/"+ "//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U"+ "g9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC", "base64"), cid: cid } ] }; // メール送信のコールバック関数 var callback = function(error, success){ if(error){ console.log("Error occured"); console.log(error.message); return; } if(success){ console.log("Message sent successfully!"); }else{ console.log("Message failed, reschedule!"); } }; // メール送信 var mail; try{ mail = nodemailer.send_mail(message, callback); }catch(e) { console.log("Caught Exception",e); }
では上から順番にみていきましょう。 モジュールのロードとファイル名設定のところは省略。 ロードしたモジュールのメンバにSMTPサーバーの設定をしています。
//SMTPサーバーの設定 nodemailer.SMTP = { host: "something.smtp.com", port: 25, ssl: true, use_authentication: true, user: "your mail account", pass: "your mail password" };
host名やポート番号、ssl使用などを設定しています。 テスト時にはsmtp.gmail.com:465に対して、sslをtrueにした状態でGmaiのIDとパスワードで送信できることを確認しました。
次はメールについての情報を作成します。
//メール情報の作成 var message = { sender: 'Sender Name <yourmailaddress@mail.com>', to: '"Receiver Name" <receiveraddress@mail.com>', subject: "Nodemailer is unicode friendly ✔", body: "Hello to myself!", html:"<p><b>Hello</b> to myself <img src=\"cid:"+cid+"\"/></p>", debug: true, attachments:[ { filename: "notes.txt", contents: "Some notes about this e-mail" }, { filename: "image.png", contents: new Buffer("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/"+ "//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U"+ "g9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC", "base64"), cid: cid } ] };
sender(送信元アドレス)とto(送信先アドレス)はメールアドレスをそのまま設定することもできますし、"名前"<メールアドレス>形式でカンマ区切りで複数記述することもできます。 bodyはplaintextのメール本文、htmlはHTMLメールのときのメール本文になります。 debug=trueにしていると、メール送信時に詳細な情報が出力されます。 最後のattachmentsは添付ファイルの指定で、ここではテキストの添付ファイルとHTMLにイメージの埋め込みを行っています。 上記以外にもccやbccが設定可能です。
最後にコールバック関数を定義し、メール送信をしています。
// メール送信のコールバック関数 var callback = function(error, success){ if(error){ console.log("Error occured"); console.log(error.message); return; } if(success){ console.log("Message sent successfully!"); }else{ console.log("Message failed, reschedule!"); } }; // メール送信 var mail; try{ mail = nodemailer.send_mail(message, callback); }catch(e) { console.log("Caught Exception",e); }
コールバック関数ではメール送信成功・失敗でメッセージ出力内容を変更しているだけです。 メール送信部分ではsend_mail()関数にメール情報とコールバック関数を渡して、メールを送信しています。
$ node mail.js
少し時間があいた後、メール送信結果メッセージが表示されます。 送信されたメールを見ると、添付ファイルとHTMLイメージの埋め込みも確認できると思います。
まとめ
今回はメール送信モジュールについてご紹介しました。 Nodemailer以外にもメール関連のモジュールはたくさんあるので、いろいろ調べてみてください。 ではまた次回。