2012-01-31 81 views
3

我已經通過多個信息源絕望通過XOAUTH連接到谷歌的Gmail閱讀: https://github.com/nu7hatch/gmail如何實現Gmail的IMAP與Omniauth

最後,ominauth處理身份驗證: https://github.com/Yesware/omniauth-google

實際上,我怎麼綁這些代碼在一起,使東西ü黑貂? 請讓我知道任何真正的世界實現的,這裏是連接到Gmail的一些例子: http://otherinbox.com http://goslice.com

+0

我有同樣的問題,我一直在努力使這項工作,但我不能 – Shakes 2012-05-01 23:07:57

回答

9

我有麻煩,像你一樣,使用現有的寶石,因爲谷歌的XOAUTH現在已經過時。你應該使用他們的新XOAUTH2。

下面是一個使用XOAUTH2協議從Google獲取電子郵件的示例。此示例使用mailgmail_xoauth,omniauthomniauth-google-oauth2寶石。

您還需要註冊您的應用程序Google's API console才能獲得您的API令牌。

# in an initializer: 
ENV['GOOGLE_KEY'] = 'yourkey' 
ENV['GOOGLE_SECRET'] = 'yoursecret' 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], { 
    scope: 'https://mail.google.com/,https://www.googleapis.com/auth/userinfo.email' 
    } 

end 

# in your script 
email = auth_hash[:info][:email] 
access_token = auth_hash[:credentials][:token] 

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false) 
imap.authenticate('XOAUTH2', email, access_token) 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    mail = Mail.read_from_string msg 

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end 
+0

這真的很有幫助謝謝。我使用的是「gmail」gem,並轉而使用「gmail_xoauth」似乎解決了這個問題。謝謝。 – stef 2013-06-11 12:45:28

+1

我不認爲這個解決方案可以工作了。我一直得到: Net :: IMAP :: NoResponseError:無效憑證(失敗) – Richardsondx 2015-08-09 15:46:56