--> -->

skimemo


skimemo - 日記/2016-06-19

_ LaravelでMailDevを使って心おきなくメール送信をテストする

メール配信する処理を作成するときに困るのが配信先です。
通常は自分宛にメールしますが、それだと自分のメールボックスがゴミだらけになりますし、自分宛にしか送れませんし、開発中のバグで他の(本番用の)メールアドレスに送ってしまうと大変です。
そこで欲しくなるのが、SMTPのモックです。

MailDevはそんな悩みを一気に解消してくれます。
SMTP機能とWEBメーラーの機能を持っているので、完全に閉じた環境でメール配信をテストすることができます。

_ インストール

MailDevはnodejs上で動きます。
まずはnodejsのインストール。
こちらのページの通りにインストールします。

$ curl --silent --location https://rpm.nodesource.com/setup_4.x | sudo bash -
$ sudo yum -y install nodejs

そしたら次はMailDev。

$ sudo npm install -g maildev

これでもう完了。設定ファイルも何もありません。

_ 起動

早速起動。

$ maildev
MailDev app running at 0.0.0.0:1080
MailDev SMTP Server running at 0.0.0.0:1025
^Z

デフォルトではローカルでポートをlistenします。
外からブラウズできるよう、HTTPのアドレスを指定します。
ついでに実際の配信も出来るように本当のsmtp(下記ではlocahost)も指定しておきます。

$ maildev --outgoing-host localhost --web-ip IPアドレス

_ 動作確認

smtpで話しかけてみます。

$ telnet localhost 1025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 dns.hogehoge.jp ESMTP
HELO example.jp
250 OK: Nice to meet you [127.0.0.1]
MAIL FROM: test@example.jp
501 Error: Bad sender address syntax
MAIL FROM:<test@example.jp>
250 Accepted
RCPT TO:<address@example.jp>
250 Accepted
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: hello maildev

This is a test mail.
.
250 Message queued as yn8NHZd4
^]
telnet> quit
Connection closed.

ブラウザでWeb UIへアクセスしてみます。
アクセス先は http://IPアドレス:1080/

e1.png

おおー、なんか来てますね。
早速メールを開いてみると、

e2.png

中身も見れた(あたりまえ(笑))。
リレー用SMTPの引数も指定しているので、Relayアイコンが有効です。クリックすると確認ダイアログが出ます。

e6.png

[OK]を押すと配信完了のダイアログが出て配信完了。

e7.png

本当にメールが来ているので、メーラーで確認すればOKです。

_ 開発用機能

このWeb UIの白眉はテスト用のメニューがちゃんと揃っているところ。
Displayメニューでは、HTML形式、テキスト形式、ヘッダー、元データを確認できます。

e3.png

Viewportメニューでは、スマホ用、タブレット用、PC用の見栄えを確認できます。

e4.png

_ 起動設定

さて、遊んでばかりいてもしょうが無いので(笑)、自動起動設定を行います。
init.dに起動ファイルを作成。

#!/bin/sh
#
# maildev        init file for starting up the maildev daemon
#
# chkconfig:   - 20 80
# description: Starts and stops the maildev daemon.

# Source function library.
. /etc/rc.d/init.d/functions

name="maildev"
exec="/usr/bin/$name"
pidfile="/var/run/maildev/maildev.pid"
MAILDEV_OPTIONS="--outgoing-host localhost --web-ip IPアドレス"

lockfile=/var/lock/subsys/maildev

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $name: "
    daemon "$exec $MAILDEV_OPTIONS" &
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    [ $retval -eq 0 ] && ps ax | grep node.*maildev | awk '{print $0}' | tail -n 1 > $pidfile
    return $retval
}

stop() {
    echo -n $"Stopping $name: "
    killproc -p $pidfile $name
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    false
}

rh_status() {
    status -p $pidfile $name
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
        exit 2
esac
exit $?

chkconfigで登録。

$ sudo chkconfig --add maildev
$ chkconfig maildev on

これで完了〜。
念のためiptablesなどで1080へアクセス出来る人を絞ってくださいね。

_ Laravelの設定

紹介するまでもないぐらい超カンタンです。
config/mail.phpのポートを1025にするだけ。

e5.png

_ 参考URL

こんな素敵なソフトなのに日本語の情報ってこれしか無いんじゃないだろうか。感謝。
maildev (SMTP mock server) を使ってハイパーメール開発

_ 20170815追記: Windowsでもカンタン

このmaildevはnodejsベースですので、Windowsでもnodejsが入っていれば動きます。
nodejsのインストールはググればいくらでも出てくるので適当に。

まずはnpmが入っていることを確認。

C:\Users\atsumi>npm

Usage: npm <command>

where <command> is one of:
   access, add-user, adduser, apihelp, author, bin, bugs, c,
   cache, completion, config, ddp, dedupe, deprecate, dist-tag,
   dist-tags, docs, edit, explore, faq, find, find-dupes, get,
   help, help-search, home, i, info, init, install, issues, la,
   link, list, ll, ln, login, logout, ls, outdated, owner,
   pack, ping, prefix, prune, publish, r, rb, rebuild, remove,
   repo, restart, rm, root, run-script, s, se, search, set,
   show, shrinkwrap, star, stars, start, stop, t, tag, team,
   test, tst, un, uninstall, unlink, unpublish, unstar, up,
   update, upgrade, v, verison, version, view, whoami

npm <cmd> -h     quick help on <cmd>
npm -l           display full usage info
npm faq          commonly asked questions
npm help <term>  search for help on <term>
npm help npm     involved overview

Specify configs in the ini-formatted file:
    C:\Users\atsumi\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@2.14.4 C:\Program Files\nodejs\node_modules\npm

ちゃんと入っています。
早速インストール。

C:\Users\atsumi>npm install -g maildev
npm WARN deprecated mimelib@0.2.19: This module is deprecated
C:\Users\atsumi\AppData\Roaming\npm\maildev -> C:\Users\atsumi\AppData\Roaming\npm\node_modules\maildev\bin\maildev
maildev@0.14.0 C:\Users\atsumi\AppData\Roaming\npm\node_modules\maildev
├── open@0.0.5
├── async@1.5.1
├── smtp-server@1.4.0
├── commander@2.9.0 (graceful-readlink@1.0.1)
├── simplesmtp@0.3.35 (xoauth2@0.1.8, rai@0.1.12)
├── smtp-connection@2.3.1 (nodemailer-shared@1.0.4)
├── express@4.13.4 (escape-html@1.0.3, array-flatten@1.1.1, cookie-signature@1.0.6, utils-merge@1.0.0, merge-descriptors@1.0.1, vary@1.0.1, content-type@1.0.2, methods@1.1.2, fresh@0.3.0, cookie@0.1.5, range-parser@1.0.3, content-disposition@0.5.1, path-to-regexp@0.1.7, parseurl@1.3.1, etag@1.7.0, depd@1.1.1, qs@4.0.0, on-finished@2.3.0, finalhandler@0.4.1, debug@2.2.0, proxy-addr@1.0.10, send@0.13.1, type-is@1.6.15, accepts@1.2.13, serve-static@1.10.3)
├── mailparser@0.5.3 (mime@1.3.6, mimelib@0.2.19, uue@3.1.0, encoding@0.1.12)
├── wildstring@1.0.8
└── socket.io@1.4.5 (debug@2.2.0, has-binary@0.1.7, socket.io-parser@2.2.6, socket.io-adapter@0.4.0, engine.io@1.6.8, socket.io-client@1.4.5)

なにやらワーニングが出ていますがとりあえず入ったようです。

そして起動。

C:\Users\atsumi>maildev
MailDev app running at 0.0.0.0:1080
MailDev SMTP Server running at 0.0.0.0:1025

あとは前述の通り1025にtelnetして、1080にブラウザで接続して動作確認すれば完了〜。

Category: [Linux] - 00:06:23



 
Last-modified: 2016-06-19 (日) 00:06:25 (2859d)