diff --git a/app/models/channel/email_parser.rb b/app/models/channel/email_parser.rb index 300a2b791..11b36d4a6 100644 --- a/app/models/channel/email_parser.rb +++ b/app/models/channel/email_parser.rb @@ -641,12 +641,22 @@ returns data = {} begin - data[:from_email] = Mail::Address.new(from).address - data[:from_local] = Mail::Address.new(from).local - data[:from_domain] = Mail::Address.new(from).domain - data[:from_display_name] = Mail::Address.new(from).display_name || - (Mail::Address.new(from).comments && Mail::Address.new(from).comments[0]) - rescue + list = Mail::AddressList.new(from) + list.addresses.each { |address| + data[:from_email] = address.address + data[:from_local] = address.local + data[:from_domain] = address.domain + data[:from_display_name] = address.display_name || + (address.comments && address.comments[0]) + break if data[:from_email].present? && data[:from_email] =~ /@/ + } + rescue => e + if from =~ /<>/ && from =~ /<.+?>/ + data = sender_properties(from.gsub(/<>/, '')) + end + end + + if data.empty? || data[:from_email].blank? from.strip! if from =~ /^(.+?)<(.+?)@(.+?)>$/ data[:from_email] = "#{$2}@#{$3}" diff --git a/test/fixtures/mail58.box b/test/fixtures/mail58.box new file mode 100644 index 000000000..959705f56 --- /dev/null +++ b/test/fixtures/mail58.box @@ -0,0 +1,24 @@ +From: "Yangzhou ABC Lighting Equipment " , "LTD" +Reply-To: zsm@example.com +To: "verkauf" +Subject: new design solar street lights +Message-ID: <201609141249219194555@example.com> +Date: Wed, 14 Sep 2016 12:49:21 +0800 +X-Mailer: Foxmail 6, 10, 201, 20 [cn] +MIME-Version: 1.0 +X-Priority: 3 +X-CM-TRANSID:iOCowAC39vrU1thXd4NnAQ--.234S2 +X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 + VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUg3xhUUUUU +X-Originating-IP: [121.233.254.237] +X-CM-SenderInfo: to16vxpkrqw63pof0z/1tbiTBXk7ldp+Z4oIwAAsB +Content-Type: text/plain; + charset=iso-8859-1 +Content-Transfer-Encoding: quoted-printable + +=E4=F6=FC=DF ad asd + +-Martin + +-- +Old programmers never die. They just branch to a new address. \ No newline at end of file diff --git a/test/fixtures/mail59.box b/test/fixtures/mail59.box new file mode 100644 index 000000000..215add685 --- /dev/null +++ b/test/fixtures/mail59.box @@ -0,0 +1,24 @@ +From: "Yangzhou ABC Lighting Equipment " <>, "LTD" +Reply-To: zsm@example.com +To: "verkauf" +Subject: new design solar street lights +Message-ID: <201609141249219194555@example.com> +Date: Wed, 14 Sep 2016 12:49:21 +0800 +X-Mailer: Foxmail 6, 10, 201, 20 [cn] +MIME-Version: 1.0 +X-Priority: 3 +X-CM-TRANSID:iOCowAC39vrU1thXd4NnAQ--.234S2 +X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 + VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUg3xhUUUUU +X-Originating-IP: [121.233.254.237] +X-CM-SenderInfo: to16vxpkrqw63pof0z/1tbiTBXk7ldp+Z4oIwAAsB +Content-Type: text/plain; + charset=iso-8859-1 +Content-Transfer-Encoding: quoted-printable + +=E4=F6=FC=DF ad asd + +-Martin + +-- +Old programmers never die. They just branch to a new address. \ No newline at end of file diff --git a/test/unit/email_parser_test.rb b/test/unit/email_parser_test.rb index 63f478b7f..121b6e5db 100644 --- a/test/unit/email_parser_test.rb +++ b/test/unit/email_parser_test.rb @@ -1157,6 +1157,40 @@ Bob Smith ', }, }, + { + data: IO.binread('test/fixtures/mail58.box'), + body_md5: '548917e0bff0806f9b27c09bbf23bb38', + params: { + from: 'Yangzhou ABC Lighting Equipment , LTD ', + from_email: 'bob@example.com', + from_display_name: 'Yangzhou ABC Lighting Equipment', + subject: 'new design solar street lights', + content_type: 'text/plain', + body: "äöüß ad asd + +-Martin + +-- +Old programmers never die. They just branch to a new address." + }, + }, + { + data: IO.binread('test/fixtures/mail59.box'), + body_md5: '548917e0bff0806f9b27c09bbf23bb38', + params: { + from: '"Yangzhou ABC Lighting Equipment " <>, "LTD" ', + from_email: 'ly@example.com', + from_display_name: 'LTD', + subject: 'new design solar street lights', + content_type: 'text/plain', + body: "äöüß ad asd + +-Martin + +-- +Old programmers never die. They just branch to a new address." + }, + }, ] count = 0