FIX: cleanup aliases in email From and Reply-to fields to prevent Bad sender address syntax errors

This commit is contained in:
Neil Lalonde 2014-08-08 13:35:25 -04:00
parent 3b76fd82fd
commit 50ac4c6336
3 changed files with 23 additions and 3 deletions

View file

@ -21,4 +21,9 @@ module Email
email.downcase
end
def self.cleanup_alias(name)
# TODO: I'm sure there are more, but I can't find a list
name ? name.gsub(/[:<>]/, '') : name
end
end

View file

@ -165,14 +165,14 @@ module Email
def alias_email(source)
return source if @opts[:from_alias].blank? && SiteSetting.email_site_title.blank?
if !@opts[:from_alias].blank?
"#{@opts[:from_alias]} <#{source}>"
"#{Email.cleanup_alias(@opts[:from_alias])} <#{source}>"
else
"#{SiteSetting.email_site_title} <#{source}>"
"#{Email.cleanup_alias(SiteSetting.email_site_title)} <#{source}>"
end
end
def site_alias_email(source)
"#{SiteSetting.email_site_title.presence || SiteSetting.title} <#{source}>"
"#{Email.cleanup_alias(SiteSetting.email_site_title.presence || SiteSetting.title)} <#{source}>"
end
end

View file

@ -56,6 +56,11 @@ describe Email::MessageBuilder do
it "returns a Reply-To header with the reply key" do
expect(reply_by_email_builder.header_args['Reply-To']).to eq(SiteSetting.title + " <r+#{reply_key}@reply.myforum.com>")
end
it "cleans up the site title" do
SiteSetting.stubs(:title).returns(">>>Obnoxious Title: Deal With It<<<")
expect(reply_by_email_builder.header_args['Reply-To']).to eq("Obnoxious Title Deal With It <r+#{reply_key}@reply.myforum.com>")
end
end
context "With the SiteSetting disabled" do
@ -247,6 +252,16 @@ describe Email::MessageBuilder do
expect(build_args[:from]).to eq("The Forum <#{SiteSetting.notification_email}>")
end
it "cleans up aliases in the from_alias arg" do
builder = Email::MessageBuilder.new(to_address, from_alias: "Finn: the Dog <3", from: finn_email)
builder.build_args[:from].should == "Finn the Dog 3 <#{finn_email}>"
end
it "cleans up the email_site_title" do
SiteSetting.stubs(:email_site_title).returns("::>>>Best Forum EU: Award Winning<<<")
expect(build_args[:from]).to eq("Best Forum EU Award Winning <#{SiteSetting.notification_email}>")
end
end
end