Get access to Gmail IMAP and STMP via OAuth, using the standard Ruby Net libraries.
The gem supports 3-legged OAuth, and 2-legged OAuth for Google Apps Business or Education account owners.
Note: 2-legged OAuth support was added by Wojciech Kruszewski.
$ gem install gmail_xoauth
For testing, you can generate and validate your OAuth tokens thanks to the awesome xoauth.py tool.
$ python xoauth.py --generate_oauth_token [email protected]
Or if you want some webapp code, check the gmail-oauth-sinatra project.
For your tests, Gmail allows to set 'anonymous' as the consumer key and secret.
require 'gmail_xoauth'
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH', '[email protected]',
:consumer_key => 'anonymous',
:consumer_secret => 'anonymous',
:token => '4/nM2QAaunKUINb4RrXPC55F-mix_k',
:token_secret => '41r18IyXjIvuyabS/NDyW6+m'
)
messages_count = imap.status('INBOX', ['MESSAGES'])['MESSAGES']
puts "Seeing #{messages_count} messages in INBOX"
Note that the Net::IMAP#login method does not use support custom authenticators, so you have to use the Net::IMAP#authenticate method.
If you use 2-legged OAuth:
require 'gmail_xoauth'
imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.authenticate('XOAUTH', '[email protected]',
:two_legged => true,
:consumer_key => 'a',
:consumer_secret => 'b'
)
For your tests, Gmail allows to set 'anonymous' as the consumer key and secret.
require 'gmail_xoauth'
smtp = Net::SMTP.new('smtp.gmail.com', 587)
smtp.enable_starttls_auto
secret = {
:consumer_key => 'anonymous',
:consumer_secret => 'anonymous',
:token => '4/nM2QAaunKUINb4RrXPC55F-mix_k',
:token_secret => '41r18IyXjIvuyabS/NDyW6+m'
}
smtp.start('gmail.com', '[email protected]', secret, :xoauth)
smtp.finish
Note that Net::SMTP#enable_starttls_auto
is not defined in Ruby 1.8.6.
If you use 2-legged OAuth:
require 'gmail_xoauth'
smtp = Net::SMTP.new('smtp.gmail.com', 587)
smtp.enable_starttls_auto
secret = {
:two_legged => true,
:consumer_key => 'a',
:consumer_secret => 'b'
}
smtp.start('gmail.com', '[email protected]', secret, :xoauth)
smtp.finish
Tested on Ruby MRI 1.8.6, 1.8.7, 1.9.1 and 1.9.2. Feel free to send me a message if you tested this code with other implementations of Ruby.
The only external dependency is the oauth gem.
- 0.3.2 New email for the maintainer
- 0.3.1 2-legged OAuth support confirmed by BobDohnal
- 0.3.0 Experimental 2-legged OAuth support
- 0.2.0 SMTP support
- 0.1.0 Initial release with IMAP support and 3-legged OAuth
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright (c) 2011 Silentale SAS. See LICENSE for details.