Class: MultiMail::Message::SendGrid

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

Overview

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Instance Attribute Details

#dkimObject

Returns the value of attribute dkim.



5
6
7
# File 'lib/multi_mail/sendgrid/message.rb', line 5

def dkim
  @dkim
end

#spam_reportObject

Returns the value of attribute spam_report.



5
6
7
# File 'lib/multi_mail/sendgrid/message.rb', line 5

def spam_report
  @spam_report
end

#spam_scoreObject

Returns the value of attribute spam_score.



5
6
7
# File 'lib/multi_mail/sendgrid/message.rb', line 5

def spam_score
  @spam_score
end

#spfObject

Returns the value of attribute spf.



5
6
7
# File 'lib/multi_mail/sendgrid/message.rb', line 5

def spf
  @spf
end

Instance Method Details

#sendgrid_contentHash

Returns the attachments' content IDs in SendGrid format.

Returns:

  • (Hash)

    the content IDs in SendGrid format



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

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



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

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



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

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



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

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