FIX: Detect SNS notifications for SES correctly (#7284)

* Fix handling SNS notifications for AWS SES

This fixes detection of email bounce by:
- removing hard requirement for email ID, ID in webhook msg never equals this in email_log
- gets bounce_score from user stats instead of nonexistent field in webhook msg

* Remove empty line

* Prettify access to EmailLog for parsing SNS notification

Co-Authored-By: SystemZ <SystemZ@users.noreply.github.com>
This commit is contained in:
Michał Frąckiewicz 2019-04-23 05:03:31 +02:00 committed by Sam
parent 58fe45ffd9
commit 8f7cfc29db
1 changed files with 2 additions and 2 deletions

View File

@ -22,11 +22,11 @@ module Jobs
return unless Aws::SNS::MessageVerifier.new.authentic?(raw) return unless Aws::SNS::MessageVerifier.new.authentic?(raw)
message.dig("bounce", "bouncedRecipients").each do |r| message.dig("bounce", "bouncedRecipients").each do |r|
if email_log = EmailLog.find_by(message_id: message_id, to_address: r["emailAddress"]) if email_log = EmailLog.order("created_at DESC").where(to_address: r["emailAddress"]).first
email_log.update_columns(bounced: true) email_log.update_columns(bounced: true)
if email_log.user&.email.present? if email_log.user&.email.present?
if r["status"]&.start_with?["4."] || bounce_type == "Transient" if email_log.user.user_stat.bounce_score.to_s.start_with?("4.") || bounce_type == "Transient"
Email::Receiver.update_bounce_score(email_log.user.email, SiteSetting.soft_bounce_score) Email::Receiver.update_bounce_score(email_log.user.email, SiteSetting.soft_bounce_score)
else else
Email::Receiver.update_bounce_score(email_log.user.email, SiteSetting.hard_bounce_score) Email::Receiver.update_bounce_score(email_log.user.email, SiteSetting.hard_bounce_score)