2

I'm writing a Ruby (2.0) command line app that involves sending email from an email/password combination provided by the user. (To simplify things for now, I'm only working with Gmail accounts.) By using Ruby's Mail gem, I got email sending worked out very easily.

It also seems like the Mail gem can check the authenticity of a user's email and password each time an email is sent. What I am stuck on is a way to authenticate an email/password without sending any mail.

Just to be thorough, I've included the output from 3 of my attempts below. None worked, and I can't figure out where my errors were.

What is a successful way to do this?


Attemps so far...

First I tried using Net::SMTP:

> email = Net::SMTP.new('smtp.gmail.com', 587)
> email.start
> email.starttls
=> #<Net::SMTP::Response:0x007f9ff4133238 @status="220", @string="220 2.0.0 Ready to start TLS\n">

> email.auth_plain(email, password)
EOFError: end of file reached
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:931:in `recv_response'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:925:in `get_response'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:737:in `block in auth_plain'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:941:in `critical'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:736:in `auth_plain'
from (irb):7
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

> email.auth_login(email, password)
NoMethodError: undefined method `success?' for "200 dummy reply code":String
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:961:in `check_auth_response'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/smtp.rb:750:in `auth_login'
from (irb):8
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

Next, I tried using Net::POP3:

> email_pop = Net::POP3.new('pop.gmail.com', 995)
=> #<Net::POP3 pop.gmail.com:995 open=false> 
> email_pop.start('dtadams.testmail@gmail.com', 'testmail')
Net::ReadTimeout: Net::ReadTimeout
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:996:in `recv_response'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:893:in `block in initialize'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:1012:in `critical'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:893:in `initialize'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:562:in `new'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:562:in `do_start'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/pop.rb:536:in `start'
from (irb):17
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

...and finally, a very unsuccessful attempt with Net::IMAP:

> imap = Net::IMAP.new('imap.gmail.com')
Errno::EHOSTUNREACH: No route to host - connect(2)
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/imap.rb:1045:in `initialize'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/imap.rb:1045:in `open'
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/imap.rb:1045:in `initialize'
from (irb):20:in `new'
from (irb):20
from /Users/nadams/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
NcAdams
  • 2,521
  • 4
  • 21
  • 32

0 Answers0