LoginSignup
1
1

More than 5 years have passed since last update.

コードを修正することなく、安心してsendmailコマンドを叩くメール送信テストをする方法(Ubuntu)

Last updated at Posted at 2017-02-07

はじめに

サテ皆さん、sendmailしてますか?
最近、とあるメール送信処理を修正をすることになったのですが、困ったことにその実装が

sendmailコマンドを直接叩く

というものでした。

これをローカル側でテストするときに一番やっかいです。というのも、sendmailは同時にデーモンが動いていて、こっちが「やるなよ!やるなよ!」と思っていても、賢いsendmail様はメールをちゃんと相手に届けてくれます(設定によってはアレだが)。

ローカルでテストしてるときはメールを外に出したくない

じゃないですか!

デプロイする時の心配を一つでも省きたい

じゃないですか! ポート番号の書き換えを忘れて、会社の上長やテスト担当、客先の人々に怒られたくないですよね! だからこそ

コードを変えることなくテスト環境を整える

のです。

というわけで、なんとかしてsendmailを使って外に出ないメールを出したいという悪戦苦闘の結果を共有したいと思います。

前提

今回おこなうのに必要な前提は以下のとおりです。少し違う環境の時は、逐次脳内変換しておいてくださいませ(全部が全部サポートできません故…)。

  • 使ってるOSはUbuntu14.04だぜ!
  • sendmailは普通に入ってるぜ!
    • sendmailコマンドを叩けば普通にメールが送れるぜ!
    • postfix?知らない子ですね(できればMTAとかはsendmailのみにしておきます)
  • rubyも入ってるぜ!
    • 当方はrbenvで2.4.0入れた状態で解説してるぜ!
    • Pythonでもええけどそのときは逐次置き換えてね!
  • sudo -s でrootになれるぜ!

やり方

では、早速、実行方法を伝授いたします。順を追って解説していきます。

mailcatcherを導入

ではまず、送られたメールをキャッチして外に出さないRubyのgemを導入します。

Mailcatcherのサイト

$ gem install mailcacther --no-ri --no-rdoc

インストールが終われば、mailcatcherコマンドを起動確認します。そのまま起動すると、デーモンとして立ち上がるので、-fオプションで楽に動作適しできるようにしておきましょう。

$ mailcacther -f

Starting MailCatcher
==> smtp://127.0.0.1:1025
/home/***/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thin-1.5.1/lib/thin/server.rb:104: warning: constant ::Fixnum is deprecated
==> http://127.0.0.1:1080

2.4.0で動かしているのでFixnum使うなヨーというメッセージが出ていますが、無視しましょう。
動いたのを確認したら、Ctrl-Cで停止します。

Sendmailのデーモンを停止

先のmailcactherには、標準では1025がSMTPポートになりますが、オプションでポート番号を変えられるので、そのままオプション指定で起動…と思ったらそうは問屋が卸さない。すでにsendmailのデーモンが25番ポートを専有しています。

なので、このデーモンを切っちゃいましょう。ubuntuの場合、rootになってsystemctlコマンドを使います。

# systemctl stop sendmail

…え、sendmailコマンドはデーモン見てるんじゃないかって? それは無いと思います。実際この状態でコマンドを叩いても影響はありませんでした。特に、sendmailのバックにpostfixが動いている場合もありますしね…ていうか、これで動かかなかったら記事にできません…

しばらくテストをするつもりでしたら、無効化するのも手です。デーモン停止後に以下のコマンドを実行します。

# systemctl disable sendmail

これで、mailcatcherを起動する準備ができました。

参考にしたサイト

Mailcatcherを起動する

では、25番ポートを指定して、mailcatcherを起動します。25番ポートはroot権限がないと開けないので、sudoでルートになっておいてから起動します

# sudo -s
# mailcatcher --smtp-port 25

Starting MailCatcher
==> smtp://127.0.0.1:25
/home/***/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thin-1.5.1/lib/thin/server.rb:104: warning: constant ::Fixnum is deprecated
==> http://127.0.0.1:1080
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

さあ、これでメールを送れる状態になりました。

ブラウザを開く

お好みのブラウザを開いて、URLを指定します。

http://127.0.0.1:1080

これは、メーラーが送ってきたメールが表示され、テスト結果の確認に大いに役立ちます。

実際にメールを送る

あとは、メールを送って、ちゃんと結果が出るか見てみます。

$ echo Meaow3! | sendmail hoge@fuga.com

ブラウザに、hoge@fuga.comに送ったメールが表示されれば成功です! お疲れ様でした!

まとめと謝辞

テストする時は、デプロイする際の影響を最低限にしたいもので、だからこそ、人は試行錯誤するもんだと感慨にふけっております。もちろん、たくさんのテストのうちの氷山の一角ですが、これがデプロイミス減少に役立てられたら非常に嬉しく思います。

この問題で色々アドバイスを頂いた、shinosaka.rbの皆さんに感謝!

それではHappy Hacking!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1