Node.jsでメールを送る方法 ~Nodemailerの紹介~

2016年12月19日

はじめに

Node.jsで作ったシステムで、メールを送ることになったんだけど、どうやってメールを送るのか調べてみたら以外に簡単だったので、サンプルを残しておきます。

使うモジュール

  • co : 非同期を簡単に書くライブラリ
  • bluebird : なんでもプロミスにしてくれる便利なライブラリ
  • nodemailer : 今回の主役 メール送信ライブラリ
$ npm install --save-dev co bluebird nodemailer

サンプルコード

とりあえず動くサンプルコード全文

const co = require('co');
const mailer = require('nodemailer');

const mail_config={
  "host": "xxxxxxx.co.jp", //SMTPホスト
  "port": "587", // ポート
  "auth": {
    "user": "xxxxxx", //ユーザー名
    "pass": "xxxxxx" // パスワード
  }
}

//SMTPの接続
var smtp_tmp = mailer.createTransport(mail_config);
// プロミス化
var smtp = require('bluebird').promisifyAll(smtp_tmp);

// メール内容の設定
var mail = {
  from: "xxxx@xxxx.co.jp", //送信元
  to: "yyyy@yyyy.co.jp", // 送信先
  subject: "テストメール", //メールのタイトル
  text: "メール本文", //メール本文
};

co(function*(){
  try{
    var res = yield smtp.sendMailAsync(mail);
    console.log(res);
  }catch(e){
    console.log("Error");
    console.log(e);
  }
  smtp.close();
});

解説

部分に分けて解説します。

SMTPの設定

const mail_config={
  "host": "xxxxxxx.co.jp", //SMTPホスト
  "port": "587", // ポート
  "auth": {
    "user": "xxxxxx", //ユーザー名
    "pass": "xxxxxx" // パスワード
  }
}

SMTPの設定用オブジェクトを初期化します。SSLを使いたい場合は、

const mail_config={
  "host": "xxxxxxx.co.jp", //SMTPホスト
  "port": 465,
  "secure": true, // use SSL
  "auth": {
    "user": "xxxxxx", //ユーザー名
    "pass": "xxxxxx" // パスワード
  }
}

と、ポートとsecureプロパティを変更します。

SMTPの接続

//SMTPの接続
var smtp_tmp = mailer.createTransport(mail_config);
// プロミス化
var smtp = require('bluebird').promisifyAll(smtp_tmp);

SMTPを接続します。プロミス化しなくてもいいんですが、何かと便利なのでプロミス化しておきます。今回のサンプルプログラムは短いので、非同期のコールバックを書いてもいいんですけど、大きなプログラムに組み込むときは、プロミスにしておいて損はないです。

メール内容をつくる

// メール内容の設定
var mail = {
  from: "xxxx@xxxx.co.jp", //送信元
  to: "yyyy@yyyy.co.jp", // 送信先
  subject: "テストメール", //メールのタイトル
  text: "メール本文", //メール本文
};

そのまま、メールに必要な事項を書いておきます。添付ファイルを追加したい場合については後述します。

メール送信

co(function*(){
  try{
    var res = yield smtp.sendMailAsync(mail);
    console.log(res);
  }catch(e){
    console.log("Error");
    console.log(e);
  }
  smtp.close();
});

coライブラリを使っているので、smtp.sendMailをプロミス化したsmtp.MailAsyncメソッドを使用しています。

coライブラリを使用しない場合は、

smtp.sendMail(mail,function(err,res){
  console.log(res);
  smtp.close();
});

と書きます(エラー処理は省いてます。)

添付ファイルを送る場合

添付ファイルを送る場合も簡単です。mailオブジェクトにattachmentsを追加します。

// メール内容の設定
var mail = {
  from: "xxxx@xxxx.co.jp", //送信元
  to: "yyyy@yyyy.co.jp", // 送信先
  subject: "テストメール", //メールのタイトル
  text: "メール本文", //メール本文
  attachments:[{
    filename: "test.jpg",
    content: fs.readFileSync("test.jpg")
  }]
};

これで、test.jpgを添付ファイルに追加することができます。

まとめ

今回は、nodemailerを紹介しました。

Node.jsを使っていてメールを送る必要があるときに使ってみてください。