Added check if sender is system address (show sender as agent in ticket zoom).
This commit is contained in:
parent
d3285340e8
commit
136713c45f
4 changed files with 146 additions and 7 deletions
|
@ -26,6 +26,29 @@ module Channel::Filter::IdentifySender
|
||||||
if !user
|
if !user
|
||||||
user = User.find_by(email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email])
|
user = User.find_by(email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email])
|
||||||
end
|
end
|
||||||
|
if !user
|
||||||
|
|
||||||
|
# get correct customer
|
||||||
|
if mail[ 'x-zammad-ticket-create-article-sender'.to_sym ] == 'Agent'
|
||||||
|
|
||||||
|
# get first recipient and set customer
|
||||||
|
begin
|
||||||
|
to = 'raw-to'.to_sym
|
||||||
|
if mail[to] && mail[to].addrs
|
||||||
|
items = mail[to].addrs
|
||||||
|
items.each { |item|
|
||||||
|
user = user_create(
|
||||||
|
login: item.address,
|
||||||
|
firstname: item.display_name,
|
||||||
|
email: item.address,
|
||||||
|
)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.error 'ERROR: SenderIsSystemAddress: ' + e.inspect
|
||||||
|
end
|
||||||
|
end
|
||||||
if !user
|
if !user
|
||||||
user = user_create(
|
user = user_create(
|
||||||
login: mail[ 'x-zammad-customer-login'.to_sym ] || mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email],
|
login: mail[ 'x-zammad-customer-login'.to_sym ] || mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email],
|
||||||
|
@ -34,6 +57,7 @@ module Channel::Filter::IdentifySender
|
||||||
email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email],
|
email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email],
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
create_recipients(mail)
|
create_recipients(mail)
|
||||||
|
|
||||||
|
@ -77,7 +101,6 @@ module Channel::Filter::IdentifySender
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
class UpdateSettingPostmasterFilter2 < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
# return if it's a new setup
|
||||||
|
return if !Setting.find_by(name: 'system_init_done')
|
||||||
|
Setting.create_if_not_exists(
|
||||||
|
title: 'Define postmaster filter.',
|
||||||
|
name: '0012_postmaster_filter_sender_is_system_address',
|
||||||
|
area: 'Postmaster::PreFilter',
|
||||||
|
description: 'Define postmaster filter to check if email got created via email as Zammad.',
|
||||||
|
options: {},
|
||||||
|
state: 'Channel::Filter::SenderIsSystemAddress',
|
||||||
|
frontend: false
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1875,6 +1875,15 @@ Setting.create_if_not_exists(
|
||||||
state: 'Channel::Filter::Trusted',
|
state: 'Channel::Filter::Trusted',
|
||||||
frontend: false
|
frontend: false
|
||||||
)
|
)
|
||||||
|
Setting.create_if_not_exists(
|
||||||
|
title: 'Define postmaster filter.',
|
||||||
|
name: '0012_postmaster_filter_sender_is_system_address',
|
||||||
|
area: 'Postmaster::PreFilter',
|
||||||
|
description: 'Define postmaster filter to check if email got created via email as Zammad.',
|
||||||
|
options: {},
|
||||||
|
state: 'Channel::Filter::SenderIsSystemAddress',
|
||||||
|
frontend: false
|
||||||
|
)
|
||||||
Setting.create_if_not_exists(
|
Setting.create_if_not_exists(
|
||||||
title: 'Define postmaster filter.',
|
title: 'Define postmaster filter.',
|
||||||
name: '0015_postmaster_filter_identify_sender',
|
name: '0015_postmaster_filter_identify_sender',
|
||||||
|
|
92
test/unit/email_process_sender_is_system_address_test.rb
Normal file
92
test/unit/email_process_sender_is_system_address_test.rb
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class EmailProcessSenderIsSystemAddress < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
test 'process with ticket creates and system address check' do
|
||||||
|
|
||||||
|
EmailAddress.create_or_update(
|
||||||
|
channel_id: 1,
|
||||||
|
realname: 'My System',
|
||||||
|
email: 'my@system.test',
|
||||||
|
active: true,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
subject = "some new subject #{rand(9_999_999)}"
|
||||||
|
email_raw_string = "From: me@example.com
|
||||||
|
To: customer@example.com
|
||||||
|
Subject: #{subject}
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket = Ticket.find(ticket_p.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
assert_equal(subject, ticket.title)
|
||||||
|
assert_equal('new', ticket.state.name)
|
||||||
|
assert_equal('Customer', ticket.create_article_sender.name)
|
||||||
|
assert_equal('Customer', article.sender.name)
|
||||||
|
assert_equal('me@example.com', ticket.customer.email)
|
||||||
|
|
||||||
|
# check article sender + customer of ticket
|
||||||
|
subject = "some new subject #{rand(9_999_999)}"
|
||||||
|
email_raw_string = "From: my@system.test
|
||||||
|
To: me@example.com, customer@example.com
|
||||||
|
Subject: #{subject}
|
||||||
|
Message-ID: <123456789-1@linuxhotel.de>
|
||||||
|
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket = Ticket.find(ticket_p.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
p "ticket: #{ticket.inspect}"
|
||||||
|
assert_equal(subject, ticket.title)
|
||||||
|
assert_equal('open', ticket.state.name)
|
||||||
|
assert_equal('Agent', ticket.create_article_sender.name)
|
||||||
|
assert_equal('Agent', article.sender.name)
|
||||||
|
assert_equal('me@example.com', ticket.customer.email)
|
||||||
|
|
||||||
|
# check if follow up based on inital system sender address
|
||||||
|
setting_orig = Setting.get('postmaster_follow_up_search_in')
|
||||||
|
Setting.set('postmaster_follow_up_search_in', [])
|
||||||
|
|
||||||
|
# follow up possible because same subject
|
||||||
|
email_raw_string = "From: me@example.com
|
||||||
|
To: my@system.test
|
||||||
|
Subject: #{subject}
|
||||||
|
Message-ID: <123456789-2@linuxhotel.de>
|
||||||
|
References: <123456789-1@linuxhotel.de>
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p2, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket2 = Ticket.find(ticket_p2.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
assert_equal(subject, ticket2.title)
|
||||||
|
assert_equal(ticket.id, ticket2.id)
|
||||||
|
|
||||||
|
# follow up not possible because subject has changed
|
||||||
|
subject = "new subject without ticket ref #{rand(9_999_999)}"
|
||||||
|
email_raw_string = "From: me@example.com
|
||||||
|
To: my@system.test
|
||||||
|
Subject: #{subject}
|
||||||
|
Message-ID: <123456789-3@linuxhotel.de>
|
||||||
|
References: <123456789-1@linuxhotel.de>
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p2, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket2 = Ticket.find(ticket_p2.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
assert_not_equal(ticket.id, ticket2.id)
|
||||||
|
assert_equal(subject, ticket2.title)
|
||||||
|
assert_equal('new', ticket2.state.name)
|
||||||
|
|
||||||
|
Setting.set('postmaster_follow_up_search_in', setting_orig)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue