class MultiMail::Sender::Mailgun
Mailgun's outgoing mail sender.
Attributes
api_key[R]
domain[R]
Public Class Methods
new(options = {})
click to toggle source
Initializes a Mailgun
outgoing email sender.
@param [Hash] options required and optional arguments @option options [String] :api_key a Mailgun
API key @option options [String] :domain the Mailgun
email domain @see documentation.mailgun.com/api-intro.html#base-url
Calls superclass method
MultiMail::Sender::Base::new
# File lib/multi_mail/mailgun/sender.rb, line 17 def initialize(options = {}) super @api_key = settings.delete(:api_key) @domain = settings.delete(:domain) end
Public Instance Methods
deliver!(mail)
click to toggle source
Delivers a message via the Mailgun
API.
@param [Mail::Message] mail a message
# File lib/multi_mail/mailgun/sender.rb, line 50 def deliver!(mail) message = MultiMail::Message::Mailgun.new(mail).to_mailgun_hash.merge(parameters) connection = Faraday.new do |conn| conn.basic_auth 'api', api_key conn.request :multipart conn.request :url_encoded conn.adapter Faraday.default_adapter end response = connection.post("https://api.mailgun.net/v2/#{domain}/messages", message) case response.status when 401 raise InvalidAPIKey, response.body when 400, 404 body = JSON.load(response.body) case body['message'] when "'from' parameter is missing" raise MissingSender, body['message'] when "'to' parameter is missing" raise MissingRecipients, body['message'] when "Need at least one of 'text' or 'html' parameters specified" raise MissingBody, body['message'] else raise InvalidRequest, body['message'] end when 200 body = JSON.load(response.body) else raise response.body end if settings[:return_response] body else self end end
parameters()
click to toggle source
Returns the additional parameters for the API call.
@return [Hash] the additional parameters for the API call
# File lib/multi_mail/mailgun/sender.rb, line 26 def parameters parameters = settings.dup parameters.delete(:return_response) [:opens, :clicks].each do |sym| if tracking.key?(sym) parameter = :"o:tracking-#{sym}" case tracking[sym] when 'yes', 'no', 'htmlonly' parameters[parameter] = tracking[sym] when true parameters[parameter] = 'yes' when false parameters[parameter] = 'no' end # ignore nil end end parameters end