Method: MultiMail::Sender::Postmark#deliver!

Defined in:
lib/multi_mail/postmark/sender.rb

#deliver!(mail) ⇒ Object

Delivers a message via the Postmark API.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/multi_mail/postmark/sender.rb', line 49

def deliver!(mail)
  message = MultiMail::Message::Postmark.new(mail).to_postmark_hash.merge(parameters)

  response = Faraday.post do |request|
    request.url 'https://api.postmarkapp.com/email'
    request.headers['Accept'] = 'application/json'
    request.headers['Content-Type'] = 'application/json'
    request.headers['X-Postmark-Server-Token'] = @api_key
    request.body = JSON.dump(message)
  end

  body = JSON.load(response.body)

  unless response.status == 200
    case body['ErrorCode']
    when 10
      raise InvalidAPIKey, body['Message']
    when 300
      case body['Message']
      when "Header 'Content-Type' not allowed."
        raise InvalidHeader, body['Message']
      when "Header 'Date' not allowed."
        raise InvalidHeader, body['Message']
      when "Invalid 'From' value."
        raise MissingSender, body['Message']
      when 'Zero recipients specified'
        raise MissingRecipients, body['Message']
      when 'Provide either email TextBody or HtmlBody or both.'
        raise MissingBody, body['Message']
      else
        raise InvalidMessage, body['Message']
      end
    else
      raise InvalidRequest, body['Message']
    end
  end

  if settings[:return_response]
    body
  else
    self
  end
end