Added guess routine for not parseable (not RfC conform) email headers like "To: Max Kohl | [example.com] <kohl@example.com>".
This commit is contained in:
parent
9e52358d57
commit
7a5f73c79a
4 changed files with 99 additions and 12 deletions
|
@ -44,15 +44,40 @@ module Channel::Filter::IdentifySender
|
||||||
def self.create_recipients(mail)
|
def self.create_recipients(mail)
|
||||||
['raw-to', 'raw-cc'].each { |item|
|
['raw-to', 'raw-cc'].each { |item|
|
||||||
next if !mail[item.to_sym]
|
next if !mail[item.to_sym]
|
||||||
next if !mail[item.to_sym].addrs
|
begin
|
||||||
items = mail[item.to_sym].addrs
|
next if !mail[item.to_sym].addrs
|
||||||
items.each {|address_data|
|
items = mail[item.to_sym].addrs
|
||||||
user_create(
|
items.each {|address_data|
|
||||||
firstname: address_data.display_name,
|
user_create(
|
||||||
lastname: '',
|
firstname: address_data.display_name,
|
||||||
email: address_data.address,
|
lastname: '',
|
||||||
)
|
email: address_data.address,
|
||||||
}
|
)
|
||||||
|
}
|
||||||
|
rescue => e
|
||||||
|
# parse not parseable fields by mail gem like
|
||||||
|
# - Max Kohl | [example.com] <kohl@example.com>
|
||||||
|
Rails.logger.error 'ERROR: ' + e.inspect
|
||||||
|
Rails.logger.error 'ERROR: try it by my self'
|
||||||
|
recipients = mail[item.to_sym].to_s.split(',')
|
||||||
|
recipients.each {|recipient|
|
||||||
|
address = nil
|
||||||
|
display_name = nil
|
||||||
|
if recipient =~ /<(.+?)>/
|
||||||
|
address = $1
|
||||||
|
end
|
||||||
|
if recipient =~ /^(.+?)<(.+?)>/
|
||||||
|
display_name = ($1).strip
|
||||||
|
end
|
||||||
|
next if address.empty?
|
||||||
|
user_create(
|
||||||
|
firstname: display_name,
|
||||||
|
lastname: '',
|
||||||
|
email: address,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
13
test/fixtures/mail37.box
vendored
Normal file
13
test/fixtures/mail37.box
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
To: Max Kohl | [example.com] <kohl@example.com>
|
||||||
|
Cc: Ingo Best <iw@example.com>
|
||||||
|
From: Example <info@example.com>
|
||||||
|
Subject: Example: Java 8 Neuerungen
|
||||||
|
Message-ID: <566694F5.2070300@example.com>
|
||||||
|
Date: Tue, 8 Dec 2015 09:29:41 +0100
|
||||||
|
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
|
||||||
|
Thunderbird/38.3.0
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=utf-8; format=flowed
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Tag Max / Ingo!
|
|
@ -720,6 +720,19 @@ Um noch vertrauter zu werden, kannst Du mit einen externen E-Mail Account (z. B.
|
||||||
[1] http://web.de',
|
[1] http://web.de',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
data: IO.binread('test/fixtures/mail37.box'),
|
||||||
|
body_md5: 'dd67e5037a740c053c2bf91f67be072f',
|
||||||
|
params: {
|
||||||
|
from: 'Example <info@example.com>',
|
||||||
|
from_email: 'info@example.com',
|
||||||
|
from_display_name: 'Example',
|
||||||
|
subject: 'Example: Java 8 Neuerungen',
|
||||||
|
to: 'Max Kohl | [example.com] <kohl@example.com>',
|
||||||
|
cc: 'Ingo Best <iw@example.com>',
|
||||||
|
body: "Tag Max / Ingo!\n",
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
|
@ -727,13 +740,13 @@ Um noch vertrauter zu werden, kannst Du mit einen externen E-Mail Account (z. B.
|
||||||
count += 1
|
count += 1
|
||||||
#p "Count: #{count}"
|
#p "Count: #{count}"
|
||||||
parser = Channel::EmailParser.new
|
parser = Channel::EmailParser.new
|
||||||
data = parser.parse( file[:data] )
|
data = parser.parse(file[:data])
|
||||||
|
|
||||||
#puts '++' + data[:body].to_s + '++'
|
#puts '++' + data[:body].to_s + '++'
|
||||||
# check body
|
# check body
|
||||||
md5 = Digest::MD5.hexdigest( data[:body] )
|
md5 = Digest::MD5.hexdigest(data[:body])
|
||||||
#puts "IS #{md5} / should #{file[:body_md5]}"
|
#puts "IS #{md5} / should #{file[:body_md5]}"
|
||||||
assert_equal( file[:body_md5], md5 )
|
assert_equal(file[:body_md5], md5)
|
||||||
|
|
||||||
# check params
|
# check params
|
||||||
file[:params].each { |key, value|
|
file[:params].each { |key, value|
|
||||||
|
|
|
@ -1985,6 +1985,42 @@ Some Text',
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
data: IO.binread('test/fixtures/mail37.box'),
|
||||||
|
success: true,
|
||||||
|
result: {
|
||||||
|
0 => {
|
||||||
|
priority: '2 normal',
|
||||||
|
title: 'Example: Java 8 Neuerungen',
|
||||||
|
},
|
||||||
|
1 => {
|
||||||
|
sender: 'Customer',
|
||||||
|
type: 'email',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
verify: {
|
||||||
|
users: [
|
||||||
|
{
|
||||||
|
firstname: 'Example',
|
||||||
|
lastname: '',
|
||||||
|
fullname: 'Example',
|
||||||
|
email: 'info@example.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
firstname: 'Ingo',
|
||||||
|
lastname: 'Best',
|
||||||
|
fullname: 'Ingo Best',
|
||||||
|
email: 'iw@example.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
firstname: 'Max',
|
||||||
|
lastname: 'Kohl | [example.com]',
|
||||||
|
fullname: 'Max Kohl | [example.com]',
|
||||||
|
email: 'kohl@example.com',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
process(files)
|
process(files)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue