LoginSignup
18
17

More than 5 years have passed since last update.

Rails 3.2.13 にあわせて mail をアップデートしたらメールが送信できなくなった問題

Posted at

Rails 3.2.13 にあわせて mail を 2.5.3 にアップデートしたら、メールが送信できなくなってしまった (OpenSSL のエラーが出てサーバへの接続に失敗する)。

詳しく調べると、

  • SMTPS に対応してないが TLS 必須の SMTP サーバを使用している
  • openssl_verify_mode を指定している
  • mail 2.5.0..2.5.3 を使用している

場合にメールが送信できなくなるようです。

原因

下記のコミットで、それまで enable_starttls_auto だったところが enable_tls になっています (ちょうどノートついてますね)。

これにより openssl_verify_mode を指定していると、enable_starttls_auto が true でも STARTTLS を使わず SMTPS で接続しようとします。

ここで SMTP サーバが SMTPS に対応してないが TLS 必須だと、どう設定しても接続できず、詰みます。

現状

現時点 (2013-03-26) で mail のリポジトリをみると、下記のコミットで、リファクタリングと同時にこの箇所は修正されています。

ただこの修正を含む gem はまだリリースされていないようです。

actionmailer

問題が mail だけなら、関係しそうなプロジェクトでは mail 2.4.4 を使いつつ、新しいバージョンを待つ、でいいんだけど、actionmailer 3.2.13 は mail ~> 2.5.3 を要求するので Rails 3.2.13 も使えなくなってしまう。

ちなみに actionmailer 3.2.12 までは mail ~> 2.4.4 だったんだけどね。

解決方法

いくつか考えられる。

A. SMTP サーバで SMTPS 対応する、TLS 必須じゃなくする
B. openssl_verify_mode を指定しない
C. 新しい mail gem が出るまで待つ
D. mail の未リリースのコード使う
E. mail 2.5.3 にパッチあてる

E は fork するか、クラス再オープンしてメソッド上書き。
下記の様に書き換えれば良いと思う。

diff --git a/lib/mail/network/delivery_methods/smtp.rb b/lib/mail/network/delive
index 53c1330..79ceab0 100644
--- a/lib/mail/network/delivery_methods/smtp.rb
+++ b/lib/mail/network/delivery_methods/smtp.rb
@@ -124,9 +124,9 @@ module Mail
             if RUBY_VERSION >= '1.9.0'
               context = Net::SMTP.default_ssl_context
               context.verify_mode = openssl_verify_mode
-              smtp.enable_tls(context)
+              smtp.enable_starttls_auto(context)
             else
-              smtp.enable_tls(openssl_verify_mode)
+              smtp.enable_starttls_auto(openssl_verify_mode)
             end
           end
         end
18
17
1

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
18
17