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.



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.



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.



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.



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