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" }
長かったMacOSのFireWallなのかとか、自分の書いたコードがバグなのか、smtp_tls.rbのバグなのかとか散々追いかけまくってたどり着いたorz