Node.jsでメール送信が出来る

今回はサーバーとかファイル読み書きとか出来ちゃう『Node.js』ってものを使い、さくらのレンタルサーバーのSMTPからメール送信をする話です。

メール送信にはnodemailerを使用

まず、以下のパッケージをnpmを使用してインストールしてください。

Nodemailer

nodemailer-smtp-transport

インストール

npm install nodemailer
npm install nodemailer-smtp-transport

これで事前準備完了

実装

var nodemailer    = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');

var transporter = nodemailer.createTransport( smtpTransport({
    host : 'xxxxxxxxxxxx.sakura.ne.jp',
    port : 587,
    auth : {
        user : 'mmmmm@xxxxxxxxxxxx.sakura.ne.jp', // メールアドレス
        pass : 'password' // メールアドレスパスワード
    }
}));

var mailOptions = {
    from    : 'mmmmm <mmmmm@xxxxxxxxxxxx.sakura.ne.jp>', // 送信元アドレス
    to      : 'user@domain.com', // 送信するアドレス
    subject : 'Hello!', // タイトル
    text    : 'Hello world', // 本文
    html    : '<b>Hello world</b>' // html使用の本文
};

transporter.sendMail( mailOptions, function( error, info ){
    if( error ){
        return console.log( error );
    }
    console.log('Message sent: ' + info.response);

});

こんな感じです。

設定

さくらのアカウント名:
xxxxxxxxxxxx

さくらので追加したメールアドレス:
mmmmm

を自分のモノに置き換えれば、送信できるはず。

皆さんGmailばかり

コレを作る時に、ググッてるとGmailを使う方法ばかりが引っかかった。

さくらのSMTPを使用する方法が見つからなかったんですよ。

まぁ、わざわざ送信用にGmailアカウントとるのもなんか悪いし、さくらのコントロールパネルでメールアドレスを一つ追加するだけだし、それで簡単に対応できました。

規約的に問題のあるかな。。
ちゃんと調べてないけど、問題あっても自分のアカウント使うんだし良いよね?

ハマったのは、ポートの所、最初はGitHubのサンプルの通り25にしてたんだけど、うまく行かなくて587にしたら送信できました。

ココにある、この部分、

受信は行えるが送信が行えない場合、サブミッションポート(PORT 587)の設定が必要な場合があります。
設定方法を確認の上、設定してください。

ってあったので、試したらいけました。

最後に

ココで言っておきますが、心持ちはギタリストの人です。

広く浅く、色々な事を摘んでいるので、どんなこともあまり深掘りはしてません。

プログラム教養として必要だと思っているので、このブログに書いても良いかなと。

清水 亮さんの本を読んでそう思いましたね。

なんで、こんなもの作ったのかというと、それは、、最近、自動化テクニック本を読んだから。

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック

世界に散らばる何かを取得し、それをゴニョゴニョと整形し、面倒なのでデータベースで貯めずにメールを送信する事にしました。

いきなりハードル高くいくと挫折しやすいですからね。
楽な方法で、、そうそれがイイ。

でも、メール送信は、IoTの通知や外部ブログのメール投稿等、まだまだ色々と応用きくんじゃないかな。

枯れた技術新しい技術で組み合わせるのも面白いですから。

今回の話で興味が出ましたら、上の本を読んでチャレンジしてみてください。

シェアする

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です