この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
メール送信
今回ご紹介するモジュールは、メール送信のためのモジュールです。 このモジュールを使用すると、 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以外にもメール関連のモジュールはたくさんあるので、いろいろ調べてみてください。 ではまた次回。