POP3 and SMTP with SSL support

Z

zimba-tm

------=_Part_5996_12113177.1133576909329
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hello ruby-talk,

recently, I wanted to use ruby to connect to my gmail accout. Gmail
supports POP3S and SMTP with TLS authentication.

Ruby's stdlib don't support OpenSSL for those protocols.

It was pretty easy to add SSL support to POP3. There was a working
version for ruby 1.6 found on this ML, and I just had to adapt it. I
have joined a working example to this email for interested people. It
doesn't support specified certificates, so it's pretty useless for
real security.

All happy, I thought that it would be that easy for SMTP. My bad. SMTP
doesn't work the same way. Here's the RFC :
http://www.ietf.org/rfc/rfc2487.txt

What I want, is start a thread on this subject here. It looks like
ruby's support to those protocols is not complete. Is it worth
starting a new project on rubyforge ? Would those changes be
integrated in the stdlib ? I'm ready to get a bit involved here, but I
would need some help from other people too.


--
Cheers,
zimba

http://zimba.oree.ch

------=_Part_5996_12113177.1133576909329
Content-Type: application/octet-stream; name=pop3s.rb
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="pop3s.rb"

# by Minero Aoki <aamine loveruby.net>

require 'net/pop'
require 'protocols'

module Net

class POP3s < POP3
def POP3s.default_port
995
end

def POP3s.socket_type
Net::InternetMessageIOs
end
end

end




=begin

require 'net/pop'
require 'ssl'

module Net

class POP3S < POP3
def POP3S.default_port
995
end

def POP3S.socket_type
Net::SSLSocket
end

def on_connect
@socket.ssl_connect
end
end

end


=end






------=_Part_5996_12113177.1133576909329
Content-Type: application/octet-stream; name=protocols.rb
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="protocols.rb"

require 'openssl'

module Net

class InternetMessageIOs < InternetMessageIO
def connect( open_timeout )
super

ctx = OpenSSL::SSL::SSLContext.new('SSLv23')
ctx.key = nil
ctx.cert = nil

@socket = OpenSSL::SSL::SSLSocket.new(@socket, ctx)
@socket.connect

return ''
end
end

end






------=_Part_5996_12113177.1133576909329
Content-Type: application/octet-stream; name=fetchmail.rb
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="fetchmail.rb"

require 'pop3s'

username = 'zimba.tm'
password = '********'

pop = Net::pOP3s.new('pop.googlemail.com')
pop.start(username, password) # (1)
if pop.mails.empty?
puts 'No mail.'
else
i = 0
pop.mails.each do |m| # or "pop.mails.each ..." # (2)
puts m.to_s + " "
File.open("inbox/#{i}", 'w') do |f|
f.write m.pop
end
m.delete
i += 1
end
puts "#{pop.mails.size} mails popped."
end
pop.finish







------=_Part_5996_12113177.1133576909329--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top