FEATURE: clearer error message when receiving a reply to an old notification
This commit is contained in:
parent
deaf3682e9
commit
86eb3528ec
|
@ -2438,6 +2438,14 @@ en:
|
||||||
|
|
||||||
None of the destination email addresses are recognized, or the Message-ID header in the email has been modified. Please make sure that you are sending to the correct email address provided by staff.
|
None of the destination email addresses are recognized, or the Message-ID header in the email has been modified. Please make sure that you are sending to the correct email address provided by staff.
|
||||||
|
|
||||||
|
email_reject_old_destination:
|
||||||
|
title: "Email Reject Old Destination"
|
||||||
|
subject_template: "[%{email_prefix}] Email issue -- You are trying to reply to an old notification"
|
||||||
|
text_body_template: |
|
||||||
|
We're sorry, but your email message to %{destination} (titled %{former_title}) didn't work.
|
||||||
|
|
||||||
|
For security reasons we only accept replies to original notifications for 90 days. Please [visit the topic](%{short_url}) to continue the conversation.
|
||||||
|
|
||||||
email_reject_topic_not_found:
|
email_reject_topic_not_found:
|
||||||
title: "Email Reject Topic Not Found"
|
title: "Email Reject Topic Not Found"
|
||||||
subject_template: "[%{email_prefix}] Email issue -- Topic Not Found"
|
subject_template: "[%{email_prefix}] Email issue -- Topic Not Found"
|
||||||
|
|
|
@ -55,6 +55,7 @@ module Email
|
||||||
when ActiveRecord::Rollback then :email_reject_invalid_post
|
when ActiveRecord::Rollback then :email_reject_invalid_post
|
||||||
when Email::Receiver::InvalidPostAction then :email_reject_invalid_post_action
|
when Email::Receiver::InvalidPostAction then :email_reject_invalid_post_action
|
||||||
when Discourse::InvalidAccess then :email_reject_invalid_access
|
when Discourse::InvalidAccess then :email_reject_invalid_access
|
||||||
|
when Email::Receiver::OldDestinationError then :email_reject_old_destination
|
||||||
else :email_reject_unrecognized_error
|
else :email_reject_unrecognized_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -75,6 +76,10 @@ module Email
|
||||||
Rails.logger.error(msg)
|
Rails.logger.error(msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if message_template == :email_reject_old_destination
|
||||||
|
template_args[:short_url] = e.message
|
||||||
|
end
|
||||||
|
|
||||||
if message_template
|
if message_template
|
||||||
# inform the user about the rejection
|
# inform the user about the rejection
|
||||||
message = Mail::Message.new(mail_string)
|
message = Mail::Message.new(mail_string)
|
||||||
|
|
|
@ -33,6 +33,7 @@ module Email
|
||||||
class InvalidPostAction < ProcessingError; end
|
class InvalidPostAction < ProcessingError; end
|
||||||
class UnsubscribeNotAllowed < ProcessingError; end
|
class UnsubscribeNotAllowed < ProcessingError; end
|
||||||
class EmailNotAllowed < ProcessingError; end
|
class EmailNotAllowed < ProcessingError; end
|
||||||
|
class OldDestinationError < ProcessingError; end
|
||||||
|
|
||||||
attr_reader :incoming_email
|
attr_reader :incoming_email
|
||||||
attr_reader :raw_email
|
attr_reader :raw_email
|
||||||
|
@ -42,8 +43,7 @@ module Email
|
||||||
COMMON_ENCODINGS ||= [-"utf-8", -"windows-1252", -"iso-8859-1"]
|
COMMON_ENCODINGS ||= [-"utf-8", -"windows-1252", -"iso-8859-1"]
|
||||||
|
|
||||||
def self.formats
|
def self.formats
|
||||||
@formats ||= Enum.new(plaintext: 1,
|
@formats ||= Enum.new(plaintext: 1, markdown: 2)
|
||||||
markdown: 2)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(mail_string, opts = {})
|
def initialize(mail_string, opts = {})
|
||||||
|
@ -163,7 +163,15 @@ module Email
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
raise first_exception || BadDestinationAddress
|
raise first_exception if first_exception
|
||||||
|
|
||||||
|
if post = find_related_post(force: true)
|
||||||
|
if Guardian.new(user).can_see_post?(post) && post.created_at < 90.days.ago
|
||||||
|
raise OldDestinationError.new("#{Discourse.base_url}/p/#{post.id}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
raise BadDestinationAddress
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -728,8 +736,8 @@ module Email
|
||||||
@category_email_in_regex ||= Regexp.union Category.pluck(:email_in).select(&:present?).map { |e| e.split("|") }.flatten.uniq
|
@category_email_in_regex ||= Regexp.union Category.pluck(:email_in).select(&:present?).map { |e| e.split("|") }.flatten.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_related_post
|
def find_related_post(force: false)
|
||||||
return if SiteSetting.find_related_post_with_key && !sent_to_mailinglist_mirror?
|
return if !force && SiteSetting.find_related_post_with_key && !sent_to_mailinglist_mirror?
|
||||||
|
|
||||||
message_ids = Email::Receiver.extract_reply_message_ids(@mail, max_message_id_count: 5)
|
message_ids = Email::Receiver.extract_reply_message_ids(@mail, max_message_id_count: 5)
|
||||||
return if message_ids.empty?
|
return if message_ids.empty?
|
||||||
|
|
|
@ -78,6 +78,13 @@ describe Email::Receiver do
|
||||||
expect { process(:bad_destinations) }.to raise_error(Email::Receiver::BadDestinationAddress)
|
expect { process(:bad_destinations) }.to raise_error(Email::Receiver::BadDestinationAddress)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "raises an OldDestinationError when notification is too old" do
|
||||||
|
topic = Fabricate(:topic, id: 424242)
|
||||||
|
post = Fabricate(:post, topic: topic, id: 123456, created_at: 1.year.ago)
|
||||||
|
|
||||||
|
expect { process(:old_destination) }.to raise_error(Email::Receiver::OldDestinationError)
|
||||||
|
end
|
||||||
|
|
||||||
it "raises a BouncerEmailError when email is a bounced email" do
|
it "raises a BouncerEmailError when email is a bounced email" do
|
||||||
expect { process(:bounced_email) }.to raise_error(Email::Receiver::BouncedEmailError)
|
expect { process(:bounced_email) }.to raise_error(Email::Receiver::BouncedEmailError)
|
||||||
expect(IncomingEmail.last.is_bounce).to eq(true)
|
expect(IncomingEmail.last.is_bounce).to eq(true)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
Return-Path: <staged@bar.com>
|
||||||
|
From: Foo Bar <staged@bar.com>
|
||||||
|
To: wat@bar.com
|
||||||
|
Cc: foofoo@bar.com
|
||||||
|
Date: Fri, 15 Jan 2018 00:12:43 +0100
|
||||||
|
Message-ID: <999@foo.bar.mail>
|
||||||
|
In-Reply-To: <topic/424242/123456@test.localhost>
|
||||||
|
Mime-Version: 1.0
|
||||||
|
Content-Type: text/plain
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
Loading…
Reference in New Issue