Skip to content

Commit

Permalink
DEV: create bounce alert earlier if email_log detected from bounce_key
Browse files Browse the repository at this point in the history
  • Loading branch information
vinothkannans committed Nov 28, 2018
1 parent 4237ece commit bfb3c4d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
27 changes: 22 additions & 5 deletions lib/email/receiver.rb
Expand Up @@ -116,8 +116,6 @@ def process_internal
raise FromReplyByAddressError if is_from_reply_by_email_address?
raise ScreenedEmailError if ScreenedEmail.should_block?(@from_email)

hidden_reason_id = is_spam? ? Post.hidden_reasons[:email_spam_header_found] : nil

user = @from_user

if user.present?
Expand Down Expand Up @@ -188,6 +186,10 @@ def process_internal
end
end

def hidden_reason_id
@hidden_reason_id ||= is_spam? ? Post.hidden_reasons[:email_spam_header_found] : nil
end

def log_and_validate_user(user)
@incoming_email.update_columns(user_id: user.id)

Expand All @@ -204,6 +206,7 @@ def handle_bounce

if email_log.present?
email_log.update_columns(bounced: true)
post = email_log.post
topic = email_log.topic
end

Expand All @@ -213,9 +216,23 @@ def handle_bounce
Email::Receiver.update_bounce_score(@from_email, SiteSetting.hard_bounce_score)
end

return if SiteSetting.enable_whispers? &&
@from_user&.staged? &&
(topic.blank? || topic.archetype == Archetype.private_message)
if SiteSetting.enable_whispers? && @from_user&.staged?
return if email_log.blank?

if post.present? && topic.present? && topic.archetype == Archetype.private_message
body, elided = select_body
body ||= ""

create_reply(user: @from_user,
raw: body,
elided: elided,
hidden_reason_id: hidden_reason_id,
post: post,
topic: topic,
skip_validations: true,
bounce: true)
end
end

raise BouncedEmailError
end
Expand Down
7 changes: 4 additions & 3 deletions spec/components/email/receiver_spec.rb
Expand Up @@ -116,18 +116,19 @@ def process(email_name)
let(:email_address) { "linux-admin@b-s-c.co.jp" }
let(:user1) { user1 = Fabricate(:user) }
let(:user2) { user2 = Fabricate(:staged, email: email_address) }
let(:topic) { Fabricate(:topic, archetype: 'private_message', category_id: nil, user: user1, allowed_users: [user1, user2]) }
let(:post) { create_post(topic: topic, user: user1) }

before do
SiteSetting.enable_staged_users = true
SiteSetting.enable_whispers = true
end

def create_post_reply_key(value)
pm = Fabricate(:topic, archetype: 'private_message', category_id: nil, user: user1, allowed_users: [user1, user2])
Fabricate(:post_reply_key,
reply_key: value,
user: user2,
post: create_post(topic: pm, user: user1)
post: post
)
end

Expand All @@ -145,7 +146,7 @@ def create_post_reply_key(value)
SiteSetting.reply_by_email_address = "foo+%{reply_key}@discourse.org"
bounce_key = "14b08c855160d67f2e0c2f8ef36e251e"
create_post_reply_key(bounce_key)
Fabricate(:email_log, to_address: email_address, user: user2, bounce_key: bounce_key)
Fabricate(:email_log, to_address: email_address, user: user2, bounce_key: bounce_key, post: post)

expect { process(:hard_bounce_via_verp) }.to raise_error(Email::Receiver::BouncedEmailError)
post = Post.last
Expand Down

0 comments on commit bfb3c4d

Please sign in to comment.