Class: MultiMail::Message::SendGrid

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

Overview

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from MultiMail::Message::Base

Instance Method Details

#sendgrid_contentHash

Returns the attachments' content IDs in SendGrid format.

Returns:

  • (Hash)

    the 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.

Returns:

  • (Hash)

    the 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.

Returns:

  • (Hash)

    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
  hash = {}
  header_fields.each do |field|
    key = field.name.downcase
    unless %w(to subject from bcc reply-to date).include?(key)
      # The JSON must not contain integers.
      hash[field.name] = field.value.to_s
    end
  end
  hash
end

#to_sendgrid_hashHash

Returns the message as parameters to POST to SendGrid.

Returns:

  • (Hash)

    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