Module: SendGmail::MailList

Included in:
Client
Defined in:
lib/send_gmail/mail_list.rb

Instance Method Summary collapse

Instance Method Details

#mail_detail(mail_id, user_id = 'me') ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



52
53
54
55
56
57
# 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