class GmailOauth::Client

Attributes

access_token[R]
email[R]
imap[R]

Public Class Methods

new(imap_client, email_param, access_token_param) click to toggle source

Initialize a new imap session and authenticate using the oauth2 access token.

# File lib/gmail_oauth/client.rb, line 7
def initialize(imap_client, email_param, access_token_param)
  @imap = imap_client
  @email = email_param
  @access_token = access_token_param
  GmailOauth::GmailImapExtensions.patch_net_imap_response_parser imap.
    instance_variable_get("@parser").singleton_class
end

Public Instance Methods

connect() click to toggle source
# File lib/gmail_oauth/client.rb, line 15
def connect
  imap.authenticate('XOAUTH2', email, access_token)
end
fetch_emails(uids) { |message| ... } click to toggle source
# File lib/gmail_oauth/client.rb, line 29
def fetch_emails(uids, &block)
  messages = Array.new
  uids.each_slice(10) do |grp|
    connect if imap.disconnected?
    emails = imap.uid_fetch(grp.compact, 'RFC822')
    emails.each do |email|
      message = GmailOauth::Message.new(Mail.
                read_from_string(email.attr['RFC822']), email.attr['UID']) 
      yield(message) if block_given?
      messages << message
    end
  end
  messages
end
fetch_threaded_emails(thread_id) { |thread_id, messages| ... } click to toggle source
# File lib/gmail_oauth/client.rb, line 44
def fetch_threaded_emails(thread_id, &block)
  email_uids = imap.uid_search("X-GM-THRID #{thread_id}")
  messages = fetch_emails(email_uids)
  yield(thread_id, messages) if block_given?
  messages
end
get_thread_ids(uids) click to toggle source
# File lib/gmail_oauth/client.rb, line 51
def get_thread_ids(uids)
  thread_responses = imap.uid_fetch(uids, '(X-GM-THRID)')
  thread_responses.map { |t| t.attr['X-GM-THRID'] }
end
get_uids(last_seen_uid=0) click to toggle source
# File lib/gmail_oauth/client.rb, line 25
def get_uids(last_seen_uid=0)
  imap.uid_search(search_param(last_seen_uid))
end
select_mailbox(mailbox='INBOX') click to toggle source

Select appropriate mailbox. Ex: ‘INBOX’, ‘[Gmail]/All Mail’, ‘[Gmail]/Drafts’, ‘[Gmail]/Spam’, ‘[Gmail]/Trash’, ‘[Gmail]/Starred’

# File lib/gmail_oauth/client.rb, line 21
def select_mailbox(mailbox='INBOX')
  imap.select(mailbox)
end

Private Instance Methods

search_param(last_seen_uid) click to toggle source
# File lib/gmail_oauth/client.rb, line 58
def search_param(last_seen_uid)
  return "ALL" if last_seen_uid == 0
  next_uid = last_seen_uid.to_i + 1
  return "UID #{next_uid}:*"
end