Redmine 2.5 + Ruby 1.8 環境下で TLS でメールが送れなくなった場合の対処

Ruby 1.8 の環境下で Redmine を 2.5 に上げたら TLS でメールが送れなくなりました。
logs/production.log を見てみると以下のようなメッセージが出力されています。

 wrong argument (NilClass)! (Expected kind of OpenSSL::SSL::SSLContext)

原因と以前の対処

これは Redmine 2.3 の頃から同様だった気がするのですが、Ruby 1.8 + mail gem 2.5.4 以上 + SSL は相性が悪いことが判明。

Problem with ssl context for smtp · Issue #548 · mikel/mail · GitHub

そこで、Redmine 2.4 では Redmine の Gemfile に

gem 'mail', '2.5.3'

とバージョンを明示して対処していました。

Redmine 2.5 では・・・

Rails のバージョンが 3.2.17 に上がりました。
このバージョンが依存している actionmailer 3.2.17 が mail gem 2.5.4 に依存するようになってしまいました。
このため、mail gem 2.5.3 を指定するとバージョンが衝突してインストールできません。

Redmine 2.5 での対処

この問題に対処してくれている fork がありました。

Problem with ssl context for smtp · Issue #548 · mikel/mail · GitHub

これにより、Redmine の Gemfile の

source 'https://rubygems.org'

の直後に以下の行を追加して bundle install すれば動きます。

gem 'mail', '= 2.5.4', :git => 'https://github.com/sofatutor/mail', :branch => '2.5.4-with-fix-548' # see https://github.com/mikel/mail/issues/548

結論

さっさと Ruby のバージョンを上げよう