CentOS7へMailCatcherの導入と基本的な利用

メール送信のテストの時に便利なMailCatcherの導入方法と基本的な利用についてのまとめ。
 

MailCatcherとは

疑似SMTPサーバーとして稼働し、メールの送信を実際に行わずにあたかもメールが送信された内容などを確認する事ができるライブラリーです。
昔に比べるとメールサーバーを借りる事自体はそれほど難しくない状況ですが、開発環境毎にアカウントを整理したり、誤送信や、送信状況のモニタリングなども確認するとなると覚えるべき事や行うべき事も多くなり、若干煩わしさがある事も事実です。

そういった際、MailCatcherを利用するとそういった事を対応する事無く簡単にメールの送信テストを行う事ができます。

例えば、メールの送信時には送信先となるアカウントを発行し、そのアドレス宛にメールを送信し、その後、受信を行いその内容が妥当であるか確認します。
これをMailCatcherで行う場合、アカウントの準備などは不要で好きなアドレス宛に送信して問題ありません。
宛先がどこであろうと、全てのメールはMailCatcherでインターセプトされており、専用の管理画面からその内容を確認する事ができます。

このように、開発環境やテスト環境で非常に有効なライブラリです。

 

依存関係の解決

MailCatcherの動作にはCentOS7ではRubyと「sqlite-devel」が必要となります。
Rubyについては「CentOS7へのrbenvを用いたrubyの導入(システムワイド版)」を参考に導入して下さい。

「sqlite-devel」はyumで導入が可能です。

yum install sqlite-devel

環境によってはインストール時にその他にも依存関係の警告が表示される可能性もありますので、その場合は、適宜解決して下さい。

 

MailCatcherの導入

MailCatcherの導入は環境が整っていれば非常に簡単です。
以下のコマンドで導入は完了します。

gem install mailcatcher

 

MailCatcherの起動

MailCatcherの起動オプションは幾つかあります。
どのようなオプションが指定できるかは「–help」オプションをつけて実行する事で確認できます。

> mailcatcher --help
Usage: mailcatcher [options]
--ip IP Set the ip address of both servers
--smtp-ip IP Set the ip address of the smtp server
--smtp-port PORT Set the port of the smtp server
--http-ip IP Set the ip address of the http server
--http-port PORT Set the port address of the http server
--no-quit Don't allow quitting the process
-f, --foreground Run in the foreground
-b, --browse Open web browser
-v, --verbose Be more verbose
-h, --help Display this help information

 

MailCatcherをオプションなしで起動した場合、SMTPの待機ポート番号として「1025」、WEBインターフェースの待機ポート番号として「1080」、そしてWEBインターフェースへのアクセスはローカルホストからのみ可能な状態で起動されます。
例えば、SMTPの待機ポート番号を「41025」、WEBインターフェースの待機ポート番号を「41080」とし、全てのIPアドレスからWEBインターフェースを利用できるようにする場合は以下のようなオプションを指定します。

mailcatcher --smtp-port 41025 --http-ip=0.0.0.0 --http-port 41080

 

もしもfirewalldにてポート制御を行っている場合、WEBインターフェースへ外部から接続する場合は使用するポート番号(上記の場合「41080」)を解放する必要があります。
ポートが制限されていない、または解放が正しく行われている場合、当該サーバ(端末)の「41080」を指定しブラウザからアクセスすると管理画面が表示されます。

MailCatcherWebIF

 

また、MailCatcherをサービスとして起動する場合は、「/etc/systemd/system/MailCatcher.service」を作成します。

[Unit]
Description=Mailcatcher Service

[Service]
Type=simple
ExecStart=/usr/local/rbenv/shims/mailcatcher --foreground --smtp-port 41025 --http-ip=0.0.0.0 --http-port 41080

[Install]
WantedBy=multi-user.target

これでMailCatcherがサービスとして起動します。

 

基本的な使い方

では実際にMailCatcherを使ってみます。
本設定の場合、41025ポートで待機しているので接続先SMTPサーバーとしてそれらを指定するだけで利用する事が可能です。
例えば、MailコマンドでMailCatcherを使って送信メールの確認をする場合、以下のようにコマンドを入力します。

echo This is Test Mail. | mail -s "Test Mail" -S "smtp=smtp://localhost:41025" -r from@erorr.org to@erorr.org

実際にWEBインターフェースへ接続すると以下のように表示されます。

MailCatcherDemo

このように、実際にメールを送信しなくてもMailCatcherで送信されるメールのアウトプットを確認できます。

 

個々のメールについては、一覧から該当のメールを選択する事でその内容が表示され、タブの「Source」を選択すると表示内容だけでなくメールソースも確認する事が可能です。
もし一覧をクリアしたい場合は右上の「Clear」をクリックする事で一覧はクリアされます。

 

PHPからの利用

SMTPサーバーとして指定する場合は特に迷う事はありませんが、もしもPHPの標準のmail関数等を使いメールを送信する場合は「php.ini」にその設定を反映します。

sendmail_path = /usr/bin/env catchmail -f fome@erorr.org --smtp-port 41025

これでmail関数などからも利用する事ができます。
なお、ポート番号に標準の1025を利用している場合、SMTPポート番号の指定は不要です。

 

APIの利用

MailCatcherはAPIも準備されており、送信済みメールの一覧や個別メールの確認、一覧の削除や個別メールの削除などが簡単に行えます。

例えば、送信済みメールの一覧を取得する場合、GETメソッドで「/messages」へアクセスする事で、JSON形式の結果を得る事ができます。

> curl -X GET http://localhost:41080/messages
[{"id":1,"sender":"<from@erorr.org>","recipients":["<1st@erorr.org>"],"subject":"1st Mail","size":"312","created_at":"2017-08-14T04:54:23+00:00"},{"id":2,"sender":"<from@erorr.org>","recipients":["<2nd@erorr.org>"],"subject":"2nd Mail","size":"312","created_at":"2017-08-14T04:54:26+00:00"},{"id":3,"sender":"<from@erorr.org>","recipients":["<3rd@erorr.org>"],"subject":"3rd Mail","size":"312","created_at":"2017-08-14T04:54:30+00:00"}]

 
個別のメールの内容を取得する場合、GETメソッドで「/message/(メッセージID).json」へアクセスする事で、JSON形式の結果を得る事ができます。

> curl -X GET http://localhost:41080/messages/1.json
{"id":1,"sender":"<from@erorr.org>","recipients":["<1st@erorr.org>"],"subject":"1st Mail","source":"Date: Mon, 14 Aug 2017 13:54:23 +0900\r\nFrom: from@erorr.org\r\nTo: 1st@erorr.org\r\nSubject: 1st Mail\r\nMessage-ID: <59912cff.jXsl+4g6/Y2jKsRt%from@erorr.org>\r\nUser-Agent: Heirloom mailx 12.5 7/5/10\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=us-ascii\r\nContent-Transfer-Encoding: 7bit\r\n\r\nThis is 1st Mail.\r\n","size":"312","type":"text/plain","created_at":"2017-08-14T04:54:23+00:00","formats":["source","plain"],"attachments":[]}

なお、個別のメールの内容を取得する場合、メールの形式に応じて「/message/(メッセージID).plain」、「/message/(メッセージID).html」でも内容を取得する事ができるようです。

 

もしも送信済みメールの一覧を全て削除したい場合、DELETEメソッドで「/messages/clear」へアクセスする事で一覧を削除する事ができます。
また、個別にメールを削除したい場合、DELETEメソッドで「/messages/(メッセージID)」へアクセスする事で、個別のメッセージを選択し削除する事ができます。

このようにAPIにはテスト時に利用する事が想定されている基本的な操作が準備されており、非常に簡単にそして便利に利用する事が可能です。

 


以上でCentOS7へのMailCatcherの導入が完了します。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください