mirror of
https://github.com/internetee/registry.git
synced 2025-06-10 14:44:47 +02:00
50 lines
1.4 KiB
Ruby
50 lines
1.4 KiB
Ruby
class BouncedMailAddress < ApplicationRecord
|
|
validates :email, :message_id, :bounce_type, :bounce_subtype, :action, :status, presence: true
|
|
after_destroy :destroy_aws_suppression
|
|
after_create :force_delete_from_bounce
|
|
|
|
def bounce_reason
|
|
"#{action} (#{status} #{diagnostic})"
|
|
end
|
|
|
|
def self.record(json)
|
|
bounced_records = json['bounce']['bouncedRecipients']
|
|
bounced_records.each do |record|
|
|
bounce_record = BouncedMailAddress.new(params_from_json(json, record))
|
|
|
|
bounce_record.save
|
|
end
|
|
end
|
|
|
|
def self.params_from_json(json, bounced_record)
|
|
{
|
|
email: bounced_record['emailAddress'],
|
|
message_id: json['mail']['messageId'],
|
|
bounce_type: json['bounce']['bounceType'],
|
|
bounce_subtype: json['bounce']['bounceSubType'],
|
|
action: bounced_record['action'],
|
|
status: bounced_record['status'],
|
|
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::SESV2::Client.new
|
|
ses.config.credentials.access_key_id.present?
|
|
rescue Aws::Errors::MissingRegionError
|
|
false
|
|
end
|
|
|
|
def force_delete_from_bounce
|
|
Domains::ForceDeleteEmail::Base.run(email: email)
|
|
end
|
|
end
|