Class: ChainMail::Providers::Mailgun
- Defined in:
- lib/chain_mail/providers/mailgun.rb
Class Method Summary collapse
- .build_mailgun_request(mail, domain, api_key) ⇒ Object
- .deliver(mail, creds) ⇒ Object
- .error_result(error, response = nil) ⇒ Object
- .perform_mailgun_request(req) ⇒ Object
- .send_mailgun_request(mail, domain, api_key) ⇒ Object
- .success_result(response) ⇒ Object
Methods inherited from Base
Class Method Details
.build_mailgun_request(mail, domain, api_key) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/chain_mail/providers/mailgun.rb', line 24 def self.build_mailgun_request(mail, domain, api_key) uri = URI("https://api.mailgun.net/v3/#{domain}/messages") req = Net::HTTP::Post.new(uri) req.basic_auth("api", api_key) req.set_form_data( from: mail.from.first, to: mail.to.join(","), subject: mail.subject, html: mail.body.decoded ) req end |
.deliver(mail, creds) ⇒ Object
10 11 12 13 14 15 16 17 |
# File 'lib/chain_mail/providers/mailgun.rb', line 10 def self.deliver(mail, creds) domain = creds[:domain] api_key = creds[:api_key] return error_result("MAILGUN_DOMAIN or MAILGUN_API_KEY not set") unless domain && api_key send_mailgun_request(mail, domain, api_key) end |
.error_result(error, response = nil) ⇒ Object
50 51 52 |
# File 'lib/chain_mail/providers/mailgun.rb', line 50 def self.error_result(error, response = nil) { success: false, response: response, error: error } end |
.perform_mailgun_request(req) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/chain_mail/providers/mailgun.rb', line 37 def self.perform_mailgun_request(req) res = Net::HTTP.start(req.uri.hostname, req.uri.port, use_ssl: true) { |http| http.request(req) } return success_result(res) if res.is_a?(Net::HTTPSuccess) error_result("Mailgun API error: #{res.code} #{res.body}", res) rescue StandardError => e error_result(e.) end |
.send_mailgun_request(mail, domain, api_key) ⇒ Object
19 20 21 22 |
# File 'lib/chain_mail/providers/mailgun.rb', line 19 def self.send_mailgun_request(mail, domain, api_key) req = build_mailgun_request(mail, domain, api_key) perform_mailgun_request(req) end |
.success_result(response) ⇒ Object
46 47 48 |
# File 'lib/chain_mail/providers/mailgun.rb', line 46 def self.success_result(response) { success: true, response: response, error: nil } end |