Rails2.3のTLS認証メール送信

今日も凄く躓きました. 開発環境でメールサーバをgmailにしてみようと思ったらできない!

smtp_tls.rbプラグインを使う

いろいろ記事を読むとsmtp_tls.rbなんてプラグインを自作して対応させるって方法が載ってました.

ただ、smtp_tls.rbのプラグインだとRuby1.8.6以前なら動きます.
Ruby1.8.7では以下の部分でこけていました.

    check_auth_args user, secret, authtype if user or secret

これ1.8.7だとcheck_auth_argsってメソッドは引数2個なんですよ.
だから安易に以下の様にして引数を減らすと実際動きました.

    check_auth_args user, secret if user or secret

なんで1.8.7だとNET::SMTPの引数が態々減ってるのか

なんで1.8.7だとNET::SMTPの引数が態々減ってるのか疑問だったんで調べてみた

net/smtp

* SSL/TLS をサポートした(訳注:net/pop は [ruby-dev:34402]OpenSSL::SSL::SSLContext#set_params によれば未だみたい)

SMTPは対応してんじゃん!

Rails2.3での対応

じゃRailsも対応してんじゃね?

予想的中!Railsのコードを呼んでみたら書いてありましたよ!
smtp_settingsにenable_starttls_autoを指定すればいけました!

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,  
  :authentication       => :login,
  :address   => "smtp.gmail.com",
  :port      => "587",
  :domain    => "",
  :user_name => "example@gmail.com",
  :password  => "hogehoge"
}

長かったMacOSFireWallなのかとか、自分の書いたコードがバグなのか、smtp_tls.rbのバグなのかとか散々追いかけまくってたどり着いたorz