Class: MultiMail::Message::SendGrid

Inherits:
Base
  • Object
show all
Defined in:
lib/multi_mail/sendgrid/message.rb

Overview

Instance Method Summary collapse

Instance Method Details

#sendgrid_contentHash

Returns the attachments' content IDs in SendGrid format.



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/multi_mail/sendgrid/message.rb', line 36

def sendgrid_content
  hash = {}
  attachments.each do |attachment|
    if attachment.content_type.start_with?('image/')
      # Mirror Mailgun behavior for naming inline attachments.
      # @see http://documentation.mailgun.com/user_manual.html#inline-image
      hash[attachment.filename] = attachment.filename
    end
  end
  hash
end

#sendgrid_filesHash

Returns the message's attachments in SendGrid format.



23
24
25
26
27
28
29
30
31
# File 'lib/multi_mail/sendgrid/message.rb', line 23

def sendgrid_files
  hash = {}
  attachments.map do |attachment|
    # File contents must be part of the multipart HTTP POST.
    # @see http://sendgrid.com/docs/API_Reference/Web_API/mail.html
    hash[attachment.filename] = Faraday::UploadIO.new(StringIO.new(attachment.body.decoded), attachment.content_type, attachment.filename)
  end
  hash
end

#sendgrid_headersHash

Returns the message headers in SendGrid format.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/multi_mail/sendgrid/message.rb', line 8

def sendgrid_headers
  headers = {}
  header_fields.each do |field|
    key = field.name.downcase
    unless %w(to subject from bcc reply-to date message-id).include?(key)
      # The JSON must not contain integers.
      headers[field.name] = field.value.to_s
    end
  end
  headers
end

#to_sendgrid_hashHash

Returns the message as parameters to POST to SendGrid.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/multi_mail/sendgrid/message.rb', line 51

def to_sendgrid_hash
  headers = sendgrid_headers

  hash = {
    'to'       => to.to_a,
    'toname'   => to && self[:to].display_names.to_a,
    'subject'  => subject,
    'text'     => body_text,
    'html'     => body_html,
    'from'     => from && from.first,
    'bcc'      => bcc.to_a,
    'fromname' => from && self[:from].display_names.first,
    'replyto'  => reply_to && reply_to.first,
    'date'     => date && Time.parse(date.to_s).rfc2822, # Ruby 1.8.7
    'files'    => sendgrid_files,
    'content'  => sendgrid_content,
    'headers'  => headers.empty? ? nil : JSON.dump(headers),
  }

  normalize(hash)
end