Improved error handling of email processing with invalid email addresses.

This commit is contained in:
Martin Edenhofer 2017-12-20 17:15:40 +01:00
parent aef865a916
commit e9f4b5af08
2 changed files with 80 additions and 7 deletions

View file

@ -95,16 +95,19 @@ module Channel::Filter::IdentifySender
max_count = 40 max_count = 40
current_count = 0 current_count = 0
['raw-to', 'raw-cc'].each do |item| ['raw-to', 'raw-cc'].each do |item|
next if !mail[item.to_sym] next if mail[item.to_sym].blank?
begin begin
next if !mail[item.to_sym].addrs
items = mail[item.to_sym].addrs items = mail[item.to_sym].addrs
next if items.blank?
items.each do |address_data| items.each do |address_data|
next if address_data.address.blank? email_address = address_data.address
next if email_address.blank?
next if email_address !~ /@/
next if email_address.match?(/\s/)
user_create( user_create(
firstname: address_data.display_name, firstname: address_data.display_name,
lastname: '', lastname: '',
email: address_data.address, email: email_address,
) )
current_count += 1 current_count += 1
return false if current_count == max_count return false if current_count == max_count
@ -126,6 +129,8 @@ module Channel::Filter::IdentifySender
display_name = $1 display_name = $1
end end
next if address.blank? next if address.blank?
next if address !~ /@/
next if address.match?(/\s/)
user_create( user_create(
firstname: display_name, firstname: display_name,
lastname: '', lastname: '',
@ -176,7 +181,7 @@ module Channel::Filter::IdentifySender
data[:updated_by_id] = 1 data[:updated_by_id] = 1
data[:created_by_id] = 1 data[:created_by_id] = 1
user = User.create(data) user = User.create!(data)
user.update!( user.update!(
updated_by_id: user.id, updated_by_id: user.id,
created_by_id: user.id, created_by_id: user.id,

View file

@ -203,6 +203,74 @@ Some Text",
], ],
}, },
}, },
{
data: "From: sender@example.com
To: some_new_customer423@example.com
Cc: some recipient <some with invalid@example.com>, max <somebody_else@example.com>
Subject: abc some subject2
Some Text",
success: true,
result: {
0 => {
priority: '2 normal',
title: 'abc some subject2',
},
1 => {
body: 'Some Text',
sender: 'Customer',
type: 'email',
internal: false,
},
},
verify: {
users: [
{
firstname: 'max',
lastname: '',
fullname: 'max',
email: 'somebody_else@example.com',
},
{
firstname: '',
lastname: '',
fullname: 'some_new_customer423@example.com',
email: 'some_new_customer423@example.com',
},
],
},
},
{
data: "From: sender@example.com
To: some_new_customer424@example.com
Subject: abc some subject3
Reply-To: some user <no-reply-with invalid-spaces@example.com>
Some Text",
success: true,
result: {
0 => {
priority: '2 normal',
title: 'abc some subject3',
},
1 => {
body: 'Some Text',
sender: 'Customer',
type: 'email',
internal: false,
},
},
verify: {
users: [
{
firstname: '',
lastname: '',
fullname: 'some_new_customer424@example.com',
email: 'some_new_customer424@example.com',
},
],
},
},
{ {
data: "From: me@example.com data: "From: me@example.com
To: Alexander Ha <service-d1@example.com>, To: Alexander Ha <service-d1@example.com>,
@ -2812,9 +2880,9 @@ Some Text',
# verify if users are created # verify if users are created
if file[:verify][:users] if file[:verify][:users]
file[:verify][:users].each { |user_result| file[:verify][:users].each { |user_result|
user = User.where(email: user_result[:email]).first user = User.where(email: user_result[:email].downcase).first
if !user if !user
assert(false, "No user '#{user_result[:email]}' found!") assert(false, "No user '#{user_result[:email].downcase}' found!")
return return
end end
user_result.each { |key, value| user_result.each { |key, value|