2012-01-31 4 views
3
에서 Gmail의 IMAP을 구현하는 방법

나는 XOAUTH을 통해 구글의 Gmail 연결에 대한 정보의 여러 필사적 소스를 통해 읽었습니다 : https://github.com/nu7hatch/gmail은 Omniauth

마지막으로, ominauth 인증 처리 : 실제로 뭔가를 만들기 위해 함께 이러한 코드를 묶어 어떻게 https://github.com/Yesware/omniauth-google

을 유 검정색? 날 어떤 실제 구현 알려주세요, 여기에 Gmail로 연결의 예는 다음과 같습니다 http://otherinbox.com http://goslice.com

+0

저도 같은 문제가 있습니다, 내가이 일을 위해 애 쓰고있다하지만 난이 정말 도움 덕분하지 – Shakes

답변

9

나는 구글의 XOAUTH 지금은 사용되지 않기 때문에 기존의 보석을 사용하여, 당신처럼, 문제가 있었다. 새로운 XOAUTH2를 사용해야합니다.

다음은 XOAUTH2 프로토콜을 사용하여 Google에서 보낸 이메일을 가져 오는 작업 예제입니다. 이 예에서는 mail, gmail_xoauth, omniauthomniauth-google-oauth2 개의 보석을 사용합니다.

API 토큰을 받으려면 Google's API console에 앱을 등록해야합니다.

# 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"보석을 사용하고 있었고 "gmail_xoauth"로 전환하면 문제를 해결할 수없는 것처럼 보였습니다. 감사. – stef

+1

이 솔루션이 더 이상 작동하지 않는다고 생각합니다. 나는 계속 얻고 : Net :: IMAP :: NoResponseError : 유효하지 않은 자격 증명 (실패) – Richardsondx