Fixes #3145 - EmailParser (process_unprocessable_mail) ignores group routings.
This commit is contained in:
parent
16872c3c89
commit
607c221b39
2 changed files with 35 additions and 1 deletions
|
@ -226,6 +226,11 @@ returns
|
||||||
group = nil
|
group = nil
|
||||||
if channel[:group_id]
|
if channel[:group_id]
|
||||||
group = Group.lookup(id: channel[:group_id])
|
group = Group.lookup(id: channel[:group_id])
|
||||||
|
else
|
||||||
|
mail_to_group = self.class.mail_to_group(mail[:to])
|
||||||
|
if mail_to_group.present?
|
||||||
|
group = mail_to_group
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if group.blank? || group.active == false
|
if group.blank? || group.active == false
|
||||||
group = Group.where(active: true).order(id: :asc).first
|
group = Group.where(active: true).order(id: :asc).first
|
||||||
|
@ -322,6 +327,20 @@ returns
|
||||||
[ticket, article, session_user, mail]
|
[ticket, article, session_user, mail]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.mail_to_group(to)
|
||||||
|
begin
|
||||||
|
to = Mail::AddressList.new(to)&.addresses&.first&.address
|
||||||
|
rescue
|
||||||
|
Rails.logger.error 'Can not parse :to field for group destination!'
|
||||||
|
end
|
||||||
|
return if to.blank?
|
||||||
|
|
||||||
|
email = EmailAddress.find_by(email: to)
|
||||||
|
return if email&.channel.blank?
|
||||||
|
|
||||||
|
email.channel&.group
|
||||||
|
end
|
||||||
|
|
||||||
def self.check_attributes_by_x_headers(header_name, value)
|
def self.check_attributes_by_x_headers(header_name, value)
|
||||||
class_name = nil
|
class_name = nil
|
||||||
attribute = nil
|
attribute = nil
|
||||||
|
|
|
@ -124,6 +124,21 @@ RSpec.describe Channel::EmailParser, type: :model do
|
||||||
expect(Ticket.last.state.name).to eq('new')
|
expect(Ticket.last.state.name).to eq('new')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when no channel is given but a group with the :to address exists' do
|
||||||
|
let!(:email_address) { create(:email_address, email: 'baz@qux.net', channel: nil) }
|
||||||
|
let!(:group) { create(:group, name: 'baz headquarter', email_address: email_address) }
|
||||||
|
let!(:channel) do
|
||||||
|
channel = create(:email_channel, group: group)
|
||||||
|
email_address.update(channel: channel)
|
||||||
|
channel
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets the group based on the :to field' do
|
||||||
|
described_class.new.process({}, raw_mail)
|
||||||
|
expect(Ticket.last.group.id).to eq(group.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when from address matches an existing agent' do
|
context 'when from address matches an existing agent' do
|
||||||
let!(:agent) { create(:agent, email: 'foo@bar.com') }
|
let!(:agent) { create(:agent, email: 'foo@bar.com') }
|
||||||
|
|
||||||
|
@ -147,7 +162,7 @@ RSpec.describe Channel::EmailParser, type: :model do
|
||||||
From: foo@bar.com
|
From: foo@bar.com
|
||||||
To: myzammad@example.com
|
To: myzammad@example.com
|
||||||
Subject: [#{Setting.get('ticket_hook') + Setting.get('ticket_hook_divider') + ticket.number}] test
|
Subject: [#{Setting.get('ticket_hook') + Setting.get('ticket_hook_divider') + ticket.number}] test
|
||||||
|
|
||||||
Lorem ipsum dolor
|
Lorem ipsum dolor
|
||||||
RAW
|
RAW
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue