Ruby1.9.1でsmtp.gmail.comを使ってメールを送ろうとするとunknown protocol
- ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]
- ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-freebsd7]
mswin32版もfreebsd7版も同じ状況。
require 'kconv' require 'net/smtp' class Mail attr_accessor :to, :from, :subject, :body def encoded # 参考: http://code.nanigac.com/source/view/108 packed = @subject.tojis.split(//,1).pack('m').chomp encoded_subject = "=?ISO-2022-JP?B?" + packed.gsub('\n', '') + "?=" header = <<HEADER_END To: #{@to} From: #{@from} Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: Text/Plain; charset=iso-2022-jp Subject: #{encoded_subject} Date: #{Time.now.rfc2822} HEADER_END # 参考: http://d.hatena.ne.jp/takehikom/20091122/1258835349 (header + "\n" + @body).tojis.force_encoding("US-ASCII") end end class SendGMail attr_accessor :account, :password def initialize(account, password) @account = account @password = password end def send(mail) smtp = Net::SMTP.new("smtp.gmail.com", 587) smtp.enable_tls smtp.start("localhost.localdomain", @account, @password, :login) {|smtp| smtp.sendmail(mail.encoded, mail.from, mail.to) } end end
こんな感じのコードでSendGMail#sendすると下記の例外が。
/usr/local/lib/ruby/1.9/net/smtp.rb:580:in `connect' /usr/local/lib/ruby/1.9/net/smtp.rb:580:in `tlsconnect' /usr/local/lib/ruby/1.9/net/smtp.rb:553:in `do_start' /usr/local/lib/ruby/1.9/net/smtp.rb:525:in `start' gmail.rb:108:in `send' gmail.rb:172:in `block in <main>' gmail.rb:170:in `each' gmail.rb:170:in `<main>' SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol
1.8系でtlsmail使って送信したときはうまくいったんだけどなあ。ググっても全然情報が出てこなくてヽ(`Д´)ノウワァァン