module SendGmail::MailList

Public Instance Methods

mail_detail(mail_id, user_id = 'me') click to toggle source
# File lib/send_gmail/mail_list.rb, line 33
def mail_detail(mail_id, user_id = 'me')
  results = @client.execute!(
    api_method: @gmail_api.users.messages.get,
    parameters: { userId: user_id, id: mail_id }
  )
  obj = JSON.parse(results.response.body, symbolize_names: true)
  base64url_data = obj[:payload][:body][:data]
  base64url_data ||= obj[:payload][:parts].first[:body][:data]
  base64url_data ||= obj[:payload][:parts].first[:parts].first[:body][:data]
  headers = obj[:payload][:headers]

  mail = SendGmail::Objects::Mail.new
  mail.subject = pickup_contents(headers, 'Subject')
  mail.from = pickup_contents(headers, 'From')
  mail.date = Time.parse(pickup_contents(headers, 'Date'))
  mail.body = Base64.urlsafe_decode64(base64url_data).force_encoding('UTF-8')
  mail
end
mail_id_list(query, _user_id = 'me', next_page_token = nil) click to toggle source
# File lib/send_gmail/mail_list.rb, line 3
def mail_id_list(query, _user_id = 'me', next_page_token = nil)
  parameters = { userId: 'me', q: query }
  parameters[:pageToken] = next_page_token unless next_page_token.nil?

  results = @client.execute!(
    api_method: @gmail_api.users.messages.list,
    parameters: parameters
  )

  {
    mail_id_list: results.data.messages.map(&:id),
    next_page_token: results.data.nextPageToken
  }
end
mail_list(query, user_id = 'me', next_page_token = nil) click to toggle source
# File lib/send_gmail/mail_list.rb, line 18
def mail_list(query, user_id = 'me', next_page_token = nil)
  parameters = { userId: 'me', q: query }
  parameters[:pageToken] = next_page_token unless next_page_token.nil?

  results = @client.execute!(
    api_method: @gmail_api.users.messages.list,
    parameters: parameters
  )

  {
    mail_list: results.data.messages.map { |m| mail_detail(m.id, user_id) },
    next_page_token: results.data.nextPageToken
  }
end
pickup_contents(headers, name) click to toggle source
# File lib/send_gmail/mail_list.rb, line 52
def pickup_contents(headers, name)
  content = headers.select { |e| e[:name] == name }
  return nil if content.nil?
  return nil if content.first.nil?
  content.first[:value]
end