Ubuntu(14.04)環境にて、あるRubyのシステムでエラーを検出したらメールで通知しようということになり、お手軽そうなのでGmailのSMTPを使うことにしたのですが、当初ものすごく手軽に行けそうな気がしたものの、結構つまづいてしまったお話です。
RubyでGmail送信。ちゃんとお手軽なgemが存在するようなので、さっくりとソレを使うことにします。
gem install gmail
してから、下記のような感じのコードで、手元の環境で動作することを確認。
require 'gmail'
Gmail.connect('account@gmail.com', 'password') do |gmail|
gmail.deliver do
to 'address@hoge.com'
subject 'subject strain'
text_part do
body 'body string'
end
end
end
…で、借りている本番サーバーに持っていくと動かない。
よくある話ですね。。
Net::IMAP::NoResponseError
なるエラーが返ってくる。そして、Googleアカウントのセキュリティ設定のURLも提示されている。
GmailのヘルプやWeb上から、Googleアカウントの「セキュリティ」「アカウント権限」で「安全性の低いアプリのアクセス」を有効にしちゃえばいいように思うものの、それでも結果は同じ。
この本番環境が仮想環境上にあるので、ひょっとしてそれが関係あるのかしら…?などといろいろと迷走をはじめる。
結果的には、Googleアカウントの「パスワード」の「2段階認証」をONにして、「アプリパスワード」を設定してあげると動いた。
おそらく、手元の環境で難なく動いたのは、普段このアカウントにアクセスしているIPアドレスだったから(…といっても、あまり使ってないアカウントではあったのですが)で、居住地域とはまったく違う本番環境のIPアドレスからのアクセスをセキュリティ的に弾いたような印象です。
じゃあなんで2段階認証にすればOKになるんだ…とか、その辺の事情は分からずじまい。Gmailのヘルプ的にもアカウント権限の設定だけでアクセスできそうな気になっちゃいましたしね。なにはともあれ、2段階認証。