Improved email parsing.
This commit is contained in:
parent
2019fced1d
commit
3e07697954
4 changed files with 71 additions and 6 deletions
|
@ -108,10 +108,19 @@ class Channel::EmailParser
|
||||||
data[:from_display_name] = Mail::Address.new(from).display_name ||
|
data[:from_display_name] = Mail::Address.new(from).display_name ||
|
||||||
(Mail::Address.new(from).comments && Mail::Address.new(from).comments[0])
|
(Mail::Address.new(from).comments && Mail::Address.new(from).comments[0])
|
||||||
rescue
|
rescue
|
||||||
|
from.strip!
|
||||||
|
if from =~ /^(.+?)<(.+?)@(.+?)>$/
|
||||||
|
data[:from_email] = "#{$2}@#{$3}"
|
||||||
|
data[:from_local] = $2
|
||||||
|
data[:from_domain] = $3
|
||||||
|
data[:from_display_name] = $1.strip
|
||||||
|
data[:from_display_name].delete!('"')
|
||||||
|
else
|
||||||
data[:from_email] = from
|
data[:from_email] = from
|
||||||
data[:from_local] = from
|
data[:from_local] = from
|
||||||
data[:from_domain] = from
|
data[:from_domain] = from
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# do extra decoding because we needed to use field.value
|
# do extra decoding because we needed to use field.value
|
||||||
data[:from_display_name] = Mail::Field.new('X-From', data[:from_display_name]).to_s
|
data[:from_display_name] = Mail::Field.new('X-From', data[:from_display_name]).to_s
|
||||||
|
|
18
test/fixtures/mail45.box
vendored
Normal file
18
test/fixtures/mail45.box
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
To: James-Max ROGER <james-max.roger@example.com>, Support <zammad@example.com>
|
||||||
|
Subject: Nouveau message contact élégibilité Zammad
|
||||||
|
X-PHP-Originating-Script: 111:contact.php
|
||||||
|
From: Ups Rémi <r.ordonaud@example.com>
|
||||||
|
Message-Id: <20170111111111.8CEF15FB28@01.localdomain>
|
||||||
|
Date: Fri, 6 Jan 2017 19:23:41 +0100 (CET)
|
||||||
|
|
||||||
|
Nouveau message :
|
||||||
|
=============================
|
||||||
|
Nom: Orberer
|
||||||
|
Prénom: Rémi
|
||||||
|
Téléphone: xxxx
|
||||||
|
Email: xxx@example.com
|
||||||
|
Societé: KG
|
||||||
|
Adresse: RdL
|
||||||
|
CP: 11111
|
||||||
|
Ville: Olèchena
|
||||||
|
|
|
@ -680,13 +680,25 @@ end
|
||||||
body_md5: '2f0f5a21e4393c174d4670a188fc5548',
|
body_md5: '2f0f5a21e4393c174d4670a188fc5548',
|
||||||
params: {
|
params: {
|
||||||
from: '"Clement.Si" <Claudia.Shu@yahoo.com.>',
|
from: '"Clement.Si" <Claudia.Shu@yahoo.com.>',
|
||||||
from_email: '"Clement.Si" <Claudia.Shu@yahoo.com.>',
|
from_email: 'Claudia.Shu@yahoo.com.',
|
||||||
from_display_name: '',
|
from_display_name: 'Clement.Si',
|
||||||
subject: '精益生产闪婚,是谁的责任',
|
subject: '精益生产闪婚,是谁的责任',
|
||||||
to: 'abuse@domain.com',
|
to: 'abuse@domain.com',
|
||||||
cc: nil,
|
cc: nil,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
data: IO.binread('test/fixtures/mail45.box'),
|
||||||
|
body_md5: '1d847e3626145a9e886914ecf0d89368',
|
||||||
|
params: {
|
||||||
|
from: '"Ups Rémi" <r.ordonaud@example.com>',
|
||||||
|
from_email: 'r.ordonaud@example.com',
|
||||||
|
from_display_name: 'Ups Rémi',
|
||||||
|
subject: 'Nouveau message contact élégibilité Zammad',
|
||||||
|
to: 'James-Max ROGER <james-max.roger@example.com>, Support <zammad@example.com>',
|
||||||
|
cc: nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
|
|
|
@ -2015,7 +2015,33 @@ Some Text',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
data: IO.binread('test/fixtures/mail44.box'),
|
data: IO.binread('test/fixtures/mail44.box'),
|
||||||
success: false,
|
success: true,
|
||||||
|
result: {
|
||||||
|
0 => {
|
||||||
|
priority: '2 normal',
|
||||||
|
title: '精益生产闪婚,是谁的责任',
|
||||||
|
},
|
||||||
|
1 => {
|
||||||
|
sender: 'Customer',
|
||||||
|
type: 'email',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
verify: {
|
||||||
|
users: [
|
||||||
|
{
|
||||||
|
firstname: 'Clement.Si',
|
||||||
|
lastname: '',
|
||||||
|
fullname: 'Clement.Si',
|
||||||
|
email: 'claudia.shu@yahoo.com.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
firstname: '',
|
||||||
|
lastname: '',
|
||||||
|
fullname: 'abuse@domain.com',
|
||||||
|
email: 'abuse@domain.com',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
assert_process(files)
|
assert_process(files)
|
||||||
|
|
Loading…
Reference in a new issue