はじめに
それは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 #
/usr/local/bin/catchmail
のところはgemのパスが通っているところ--smtp-port 1025 #
のように後ろに#をいれているのはメールを飛ばすライブラリでPHPMailerを使っている場合、失敗するから(こうした場合fromの設定は明示的にする)- Fail in combination with WordPress (Due to the ‘-oi’ option) · Issue #103 · sj26/mailcatcher
追記
ここまで書き上げて今見てみたら、こんなのありました。
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
の部分不要になってた。
はい。ありがとうございました。