FIX: support incoming emails with no subject

This commit is contained in:
Régis Hanol 2016-02-01 12:16:15 +01:00
parent 904e532439
commit 49d1f88f6e
4 changed files with 27 additions and 4 deletions

View file

@ -47,6 +47,10 @@ en:
disable_remote_images_download_reason: "Remote images download was disabled because there wasn't enough disk space available."
anonymous: "Anonymous"
emails:
incoming:
default_subject: "Incoming email from %{email}"
errors: &errors
format: ! '%{attribute} %{message}'
messages:

View file

@ -40,7 +40,7 @@ module Email
def find_or_create_incoming_email
IncomingEmail.find_or_create_by(message_id: @mail.message_id) do |incoming_email|
incoming_email.raw = @raw_email
incoming_email.subject = @mail.subject
incoming_email.subject = subject
incoming_email.from_address = @mail.from.first.downcase
incoming_email.to_addresses = @mail.to.map(&:downcase).join(";") if @mail.to.present?
incoming_email.cc_addresses = @mail.cc.map(&:downcase).join(";") if @mail.cc.present?
@ -60,7 +60,7 @@ module Email
raise InactiveUserError if !user.active && !user.staged
if action = subscription_action_for(body, @mail.subject)
if action = subscription_action_for(body, subject)
message = SubscriptionMailer.send(action, user)
Email::Sender.new(message, :subscription).send
elsif post = find_related_post
@ -73,14 +73,14 @@ module Email
case destination[:type]
when :group
group = destination[:obj]
create_topic(user: user, raw: body, title: @mail.subject, archetype: Archetype.private_message, target_group_names: [group.name], skip_validations: true)
create_topic(user: user, raw: body, title: subject, archetype: Archetype.private_message, target_group_names: [group.name], skip_validations: true)
when :category
category = destination[:obj]
raise StrangersNotAllowedError if user.staged? && !category.email_in_allow_strangers
raise InsufficientTrustLevelError if !user.has_trust_level?(SiteSetting.email_in_min_trust)
create_topic(user: user, raw: body, title: @mail.subject, category: category.id)
create_topic(user: user, raw: body, title: subject, category: category.id)
when :reply
email_log = destination[:obj]
@ -156,6 +156,10 @@ module Email
@from ||= @mail[:from].address_list.addresses.first
end
def subject
@suject ||= @mail.subject.presence || I18n.t("emails.incoming.default_subject", email: @mail.from.first.downcase)
end
def find_or_create_user(address_field)
# decode the address field
address_field.decoded

View file

@ -219,6 +219,7 @@ describe Email::Receiver do
expect { process(:encoded_display_name) }.to change(Topic, :count)
topic = Topic.last
expect(topic.title).to eq("I need help")
expect(topic.private_message?).to eq(true)
expect(topic.allowed_groups).to include(group)
@ -228,6 +229,11 @@ describe Email::Receiver do
expect(user.name).to eq("Случайная Имя")
end
it "handles email with no subject" do
expect { process(:no_subject) }.to change(Topic, :count)
expect(Topic.last.title).to eq("Incoming email from some@one.com")
end
it "invites everyone in the chain but emails configured as 'incoming' (via reply, group or category)" do
expect { process(:cc) }.to change(Topic, :count)
emails = Topic.last.allowed_users.pluck(:email)

9
spec/fixtures/emails/no_subject.eml vendored Normal file
View file

@ -0,0 +1,9 @@
From: Some One <some@one.com>
To: team@bar.com
Date: Mon, 1 Feb 2016 00:12:43 +0100
Message-ID: <40@foo.bar.mail>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
This is an email with no subject...