BouncedMailAddress: Remove from AWS suppression list upon destroy

This commit is contained in:
Karl Erik Õunapuu 2021-02-08 16:52:31 +02:00
parent 6304ebdbc6
commit 2af0bfdda0
No known key found for this signature in database
GPG key ID: C9DD647298A34764
4 changed files with 24 additions and 3 deletions

View file

@ -93,4 +93,4 @@ group :test do
gem 'webmock'
end
gem "aws-sdk-ses", "~> 1.37"
gem "aws-sdk-sesv2", "~> 1.16"

View file

@ -155,7 +155,7 @@ GEM
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-ses (1.37.0)
aws-sdk-sesv2 (1.16.0)
aws-sdk-core (~> 3, >= 3.112.0)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.2)
@ -497,7 +497,7 @@ DEPENDENCIES
active_interaction (~> 3.8)
activerecord-import
airbrake
aws-sdk-ses (~> 1.37)
aws-sdk-sesv2 (~> 1.16)
bootsnap (>= 1.1.0)
bootstrap-sass (~> 3.4)
cancancan

View file

@ -1,5 +1,6 @@
class BouncedMailAddress < ApplicationRecord
validates :email, :message_id, :bounce_type, :bounce_subtype, :action, :status, presence: true
after_destroy :destroy_aws_suppression
def bounce_reason
"#{action} (#{status} #{diagnostic})"
@ -25,4 +26,20 @@ class BouncedMailAddress < ApplicationRecord
diagnostic: bounced_record['diagnosticCode'],
}
end
def destroy_aws_suppression
return unless BouncedMailAddress.ses_configured?
res = Aws::SESV2::Client.new.delete_suppressed_destination({ email_address: email })
res.successful?
rescue Aws::SESV2::Errors::ServiceError => e
logger.warn("Suppression not removed. #{e}")
end
def self.ses_configured?
ses ||= Aws::SES::Client.new
ses.config.credentials.access_key_id.present?
rescue Aws::Errors::MissingRegionError
false
end
end

View file

@ -0,0 +1,4 @@
Aws.config.update(
region: ENV['aws_default_region'],
credentials: Aws::Credentials.new(ENV['aws_access_key_id'], ENV['aws_secret_access_key'])
)