class Mailkick::Service::Mailgun

Public Class Methods

discoverable?() click to toggle source
# File lib/mailkick/service/mailgun.rb, line 29
def self.discoverable?
  !!(defined?(::Mailgun) && ENV["MAILGUN_API_KEY"])
end
new(options = {}) click to toggle source
# File lib/mailkick/service/mailgun.rb, line 6
def initialize(options = {})
  require "mailgun"
  mailgun_client = ::Mailgun::Client.new(options[:api_key] || ENV["MAILGUN_API_KEY"])
  domain = options[:domain] || ActionMailer::Base.smtp_settings[:domain]
  @mailgun_events = ::Mailgun::Events.new(mailgun_client, domain)
end

Public Instance Methods

bounces() click to toggle source
# File lib/mailkick/service/mailgun.rb, line 25
def bounces
  fetch(@mailgun_events.get(event: "failed"), "bounce")
end
opt_outs() click to toggle source
# File lib/mailkick/service/mailgun.rb, line 13
def opt_outs
  unsubscribes + spam_reports + bounces
end
spam_reports() click to toggle source
# File lib/mailkick/service/mailgun.rb, line 21
def spam_reports
  fetch(@mailgun_events.get(event: "complained"), "spam")
end
unsubscribes() click to toggle source
# File lib/mailkick/service/mailgun.rb, line 17
def unsubscribes
  fetch(@mailgun_events.get(event: "unsubscribed"), "unsubscribe")
end

Protected Instance Methods

fetch(response, reason) click to toggle source
# File lib/mailkick/service/mailgun.rb, line 35
def fetch(response, reason)
  response.to_h["items"].map do |record|
    {
      email: record["recipient"],
      time: ActiveSupport::TimeZone["UTC"].at(record["timestamp"]),
      reason: reason
    }
  end
end