mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
FIX: use MD5 of the email_string when there's no 'Message-Id'
This commit is contained in:
parent
1ba65765e4
commit
4a3cb4a000
5 changed files with 13 additions and 20 deletions
|
@ -40,7 +40,6 @@ module Jobs
|
||||||
message_template = case e
|
message_template = case e
|
||||||
when Email::Receiver::EmptyEmailError then :email_reject_empty
|
when Email::Receiver::EmptyEmailError then :email_reject_empty
|
||||||
when Email::Receiver::NoBodyDetectedError then :email_reject_empty
|
when Email::Receiver::NoBodyDetectedError then :email_reject_empty
|
||||||
when Email::Receiver::NoMessageIdError then :email_reject_no_message_id
|
|
||||||
when Email::Receiver::AutoGeneratedEmailError then :email_reject_auto_generated
|
when Email::Receiver::AutoGeneratedEmailError then :email_reject_auto_generated
|
||||||
when Email::Receiver::InactiveUserError then :email_reject_inactive_user
|
when Email::Receiver::InactiveUserError then :email_reject_inactive_user
|
||||||
when Email::Receiver::BlockedUserError then :email_reject_blocked_user
|
when Email::Receiver::BlockedUserError then :email_reject_blocked_user
|
||||||
|
|
|
@ -1837,13 +1837,6 @@ en:
|
||||||
|
|
||||||
Your reply was sent from a different email address than the one we expected, so we're not sure if this is the same person. Try sending from another email address, or contact a staff member.
|
Your reply was sent from a different email address than the one we expected, so we're not sure if this is the same person. Try sending from another email address, or contact a staff member.
|
||||||
|
|
||||||
email_reject_no_message_id:
|
|
||||||
subject_template: "[%{site_name}] Email issue -- No Message Id"
|
|
||||||
text_body_template: |
|
|
||||||
We're sorry, but your email message to %{destination} (titled %{former_title}) didn't work.
|
|
||||||
|
|
||||||
We couldn't find a `Message-Id` header in the email. Try sending from a different email address, or contact a staff member.
|
|
||||||
|
|
||||||
email_reject_no_account:
|
email_reject_no_account:
|
||||||
subject_template: "[%{site_name}] Email issue -- Unknown Account"
|
subject_template: "[%{site_name}] Email issue -- Unknown Account"
|
||||||
text_body_template: |
|
text_body_template: |
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require "digest"
|
||||||
require_dependency "new_post_manager"
|
require_dependency "new_post_manager"
|
||||||
require_dependency "post_action_creator"
|
require_dependency "post_action_creator"
|
||||||
require_dependency "email/html_cleaner"
|
require_dependency "email/html_cleaner"
|
||||||
|
@ -9,7 +10,6 @@ module Email
|
||||||
|
|
||||||
class ProcessingError < StandardError; end
|
class ProcessingError < StandardError; end
|
||||||
class EmptyEmailError < ProcessingError; end
|
class EmptyEmailError < ProcessingError; end
|
||||||
class NoMessageIdError < ProcessingError; end
|
|
||||||
class AutoGeneratedEmailError < ProcessingError; end
|
class AutoGeneratedEmailError < ProcessingError; end
|
||||||
class NoBodyDetectedError < ProcessingError; end
|
class NoBodyDetectedError < ProcessingError; end
|
||||||
class InactiveUserError < ProcessingError; end
|
class InactiveUserError < ProcessingError; end
|
||||||
|
@ -29,7 +29,7 @@ module Email
|
||||||
raise EmptyEmailError if mail_string.blank?
|
raise EmptyEmailError if mail_string.blank?
|
||||||
@raw_email = mail_string
|
@raw_email = mail_string
|
||||||
@mail = Mail.new(@raw_email)
|
@mail = Mail.new(@raw_email)
|
||||||
raise NoMessageIdError if @mail.message_id.blank?
|
@message_id = @mail.message_id.presence || Digest::MD5.hexdigest(mail_string)
|
||||||
end
|
end
|
||||||
|
|
||||||
def process!
|
def process!
|
||||||
|
@ -42,7 +42,7 @@ module Email
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_or_create_incoming_email
|
def find_or_create_incoming_email
|
||||||
IncomingEmail.find_or_create_by(message_id: @mail.message_id) do |ie|
|
IncomingEmail.find_or_create_by(message_id: @message_id) do |ie|
|
||||||
ie.raw = @raw_email
|
ie.raw = @raw_email
|
||||||
ie.subject = subject
|
ie.subject = subject
|
||||||
ie.from_address = @from_email
|
ie.from_address = @from_email
|
||||||
|
|
|
@ -21,14 +21,6 @@ describe Email::Receiver do
|
||||||
expect { Email::Receiver.new("") }.to raise_error(Email::Receiver::EmptyEmailError)
|
expect { Email::Receiver.new("") }.to raise_error(Email::Receiver::EmptyEmailError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an NoMessageIdError when 'mail_string' is not an email" do
|
|
||||||
expect { Email::Receiver.new("wat") }.to raise_error(Email::Receiver::NoMessageIdError)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "raises an NoMessageIdError when 'mail_string' is missing the message_id" do
|
|
||||||
expect { Email::Receiver.new(email(:missing_message_id)) }.to raise_error(Email::Receiver::NoMessageIdError)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "raises an AutoGeneratedEmailError when the mail is auto generated" do
|
it "raises an AutoGeneratedEmailError when the mail is auto generated" do
|
||||||
expect { process(:auto_generated_precedence) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
expect { process(:auto_generated_precedence) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
||||||
expect { process(:auto_generated_header) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
expect { process(:auto_generated_header) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
||||||
|
@ -65,6 +57,12 @@ describe Email::Receiver do
|
||||||
let(:post) { create_post(topic: topic, user: user) }
|
let(:post) { create_post(topic: topic, user: user) }
|
||||||
let!(:email_log) { Fabricate(:email_log, reply_key: reply_key, user: user, topic: topic, post: post) }
|
let!(:email_log) { Fabricate(:email_log, reply_key: reply_key, user: user, topic: topic, post: post) }
|
||||||
|
|
||||||
|
it "uses MD5 of 'mail_string' there is no message_id" do
|
||||||
|
mail_string = email(:missing_message_id)
|
||||||
|
expect { Email::Receiver.new(mail_string).process! }.to change { IncomingEmail.count }
|
||||||
|
expect(IncomingEmail.last.message_id).to eq(Digest::MD5.hexdigest(mail_string))
|
||||||
|
end
|
||||||
|
|
||||||
it "raises a ReplyUserNotMatchingError when the email address isn't matching the one we sent the notification to" do
|
it "raises a ReplyUserNotMatchingError when the email address isn't matching the one we sent the notification to" do
|
||||||
expect { process(:reply_user_not_matching) }.to raise_error(Email::Receiver::ReplyUserNotMatchingError)
|
expect { process(:reply_user_not_matching) }.to raise_error(Email::Receiver::ReplyUserNotMatchingError)
|
||||||
end
|
end
|
||||||
|
|
5
spec/fixtures/emails/missing_message_id.eml
vendored
5
spec/fixtures/emails/missing_message_id.eml
vendored
|
@ -1,5 +1,8 @@
|
||||||
From: Foo Bar <foo@bar.com>
|
From: Foo Bar <discourse@bar.com>
|
||||||
|
To: reply+4f97315cc828096c9cb34c6f1a0d6fe8@bar.com
|
||||||
Date: Fri, 15 Jan 2016 00:12:43 +0100
|
Date: Fri, 15 Jan 2016 00:12:43 +0100
|
||||||
Mime-Version: 1.0
|
Mime-Version: 1.0
|
||||||
Content-Type: text/plain
|
Content-Type: text/plain
|
||||||
Content-Transfer-Encoding: 7bit
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
|
Some body
|
||||||
|
|
Loading…
Reference in a new issue