mailcatcherが働かなくなったんだが(先人の知恵を借りて)解決した話

投稿日:

はじめに

それは2015年1月初旬の事だった。
新たな案件の環境作りを行う際に、うはっww、chef-solo+Vagrantのレシピ書いてあるから一発やで、うはっwww(最近書き始めて興奮している)。
なんて意気込んでいたのも束の間、去年の中旬まで動いていたはずだったmailcatcherを使ってのmail送信が失敗していたのだ。

※ mailcatcherはダミーのSMTPサーバー?を立ててくれて、ローカルでメールの送受信が確認出来る優れもの(UIも提供してくれる!!)
※ 詳しくはググっていただければと

新年早々なんということでしょう。私は愕然としました。
だって、去年の中旬まではテストでメールの確認は出来てたじゃないか。
同じレシピなのに。。ぐすん。

でも、僕は諦めなかった。
ちゃんとログを見たんだ。

そうしたらこんなのを見つけた。

/usr/local/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill': Net::ReadTimeout (Net::ReadTimeout)
        from /usr/local/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
        from /usr/local/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
        from /usr/local/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
        from /usr/local/lib/ruby/2.0.0/net/smtp.rb:932:in `recv_response'
        from /usr/local/lib/ruby/2.0.0/net/smtp.rb:555:in `block in do_start'
        from /usr/local/lib/ruby/2.0.0/net/smtp.rb:942:in `critical'
        from /usr/local/lib/ruby/2.0.0/net/smtp.rb:555:in `do_start'
        from /usr/local/lib/ruby/2.0.0/net/smtp.rb:520:in `start'
        from /usr/local/lib/ruby/gems/2.0.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
        from /usr/local/lib/ruby/gems/2.0.0/gems/mail-2.6.3/lib/mail/message.rb:2141:in `do_delivery'
        from /usr/local/lib/ruby/gems/2.0.0/gems/mail-2.6.3/lib/mail/message.rb:238:in `deliver'
        from /usr/local/lib/ruby/gems/2.0.0/gems/mailcatcher-0.5.12/bin/catchmail:50:in `<top (required)>'
        from /usr/local/bin/catchmail:23:in `load'
        from /usr/local/bin/catchmail:23:in `<main>'

?!ふぇっ!!?!?!
なんたる仕打ち。。

くぅっ。負けるものか。
僕には、いや、僕らにはグーグル先生がいるじゃないか。

ググってみた

はい。
長い妙な前置きが済んだところで、ググってみたら以下を見つけました。

Mail catching smtp timeout when running in background · Issue #182 · sj26/mailcatcher · GitHub

ログの内容ともに正にビンゴだと思います。
そして勘で読んでいくと、
#issuecomment-68647414
に辿り着きました。

メールが飛んだ

僕の信条は、ググる能力とそれを試す勇気があれば何とかなる。ですから、試してみました。

ゴーーーーーーーーーーーーール。

メールが飛んだよ。
ワッホーイ。

というわけで、その時に書いたレシピを載せときます。
何か参考になれば幸いです。

レシピ

一応、環境

  • OS
    • CentOS 6.5
  • php
    • 5.3.23
  • ruby
    • 2.0.0p598
  • gem
    • 2.0.14

※ CentOS6.5にphp5.3.23を入れたのは半ば強引なレシピで

php.iniの設定も

[mail function]
; For Win32 only.
; http://www.php.net/manual/en/mail.configuration.php#ini.smtp
; SMTP = localhost
SMTP = 127.0.0.1

; http://www.php.net/manual/en/mail.configuration.php#ini.smtp-port
; smtp_port = 25
smtp_port = 1025

; For Win32 only.
; http://www.php.net/manual/en/mail.configuration.php#ini.sendmail-from
sendmail_from = webmaster@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://www.php.net/manual/en/mail.configuration.php#ini.sendmail-path
;sendmail_path = /usr/sbin/sendmail -t -i
sendmail_path = /usr/bin/env /usr/local/bin/catchmail --smtp-port 1025 #

追記

ここまで書き上げて今見てみたら、こんなのありました。
182#issuecomment-72006318
mailcatcher 0.6.0 だと上みたいな事しなくても上手くいくかもしれません。

もっと早く書いとくべきだった。

追記:2015/03/06

最近試したら、上記にある通りgemのmailcatcherが0.6.1、eventmachineが1.0.5になっていて

# @link https://github.com/sj26/mailcatcher/issues/182#issuecomment-68647414
execute "gem install eventmachine -v 1.0.3" do
  user "root"
  command "/usr/local/bin/gem install eventmachine -v 1.0.3"
  not_if "/usr/local/bin/gem list | grep \"eventmachine (1.0.3)\""
end
execute "gem uninstall eventmachine -v 1.0.4" do
  user "root"
  command "/usr/local/bin/gem uninstall eventmachine -v 1.0.4"
  only_if "/usr/local/bin/gem list | grep \"eventmachine (1.0.4\""
end

の部分不要になってた。
はい。ありがとうございました。

一応レシピ

作成者: shimabox

Web系のプログラマをやっています。 なるべく楽しく生きていきたい。

コメントする

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

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