1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
# --
# Copyright (C) 2001-2021 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Kernel::System::PostMaster::DestQueue;
use strict;
use warnings;
our @ObjectDependencies = (
'Kernel::Config',
'Kernel::System::Log',
'Kernel::System::Queue',
'Kernel::System::SystemAddress',
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
# get parser object
$Self->{ParserObject} = $Param{ParserObject} || die "Got no ParserObject!";
# Get communication log object.
$Self->{CommunicationLogObject} = $Param{CommunicationLogObject} || die "Got no CommunicationLogObject!";
return $Self;
}
sub GetQueueID {
my ( $Self, %Param ) = @_;
# get email headers
my %GetParam = %{ $Param{Params} };
# check possible to, cc and resent-to emailaddresses
my $Recipient = '';
RECIPIENT:
for my $Key (qw(Resent-To Envelope-To To Cc Delivered-To X-Original-To)) {
next RECIPIENT if !$GetParam{$Key};
if ($Recipient) {
$Recipient .= ', ';
}
$Recipient .= $GetParam{$Key};
}
# get system address object
my $SystemAddressObject = $Kernel::OM->Get('Kernel::System::SystemAddress');
# get addresses
my @EmailAddresses = $Self->{ParserObject}->SplitAddressLine( Line => $Recipient );
# check addresses
EMAIL:
for my $Email (@EmailAddresses) {
next EMAIL if !$Email;
my $Address = $Self->{ParserObject}->GetEmailAddress( Email => $Email );
next EMAIL if !$Address;
# lookup queue id if recipiend address
my $QueueID = $SystemAddressObject->SystemAddressQueueID(
Address => $Address,
);
if ($QueueID) {
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Debug',
Key => ref($Self),
Value => "Match email: $Email to QueueID $QueueID (MessageID:$GetParam{'Message-ID'})!",
);
return $QueueID;
}
# Address/Email not matched with any that is configured in the system
# or any error occured while checking it.
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Debug',
Key => ref($Self),
Value => "No match for email: $Email (MessageID:$GetParam{'Message-ID'})!",
);
}
# If we get here means that none of the addresses in the message is defined as a system address
# or an error occured while checking it.
my $Queue = $Kernel::OM->Get('Kernel::Config')->Get('PostmasterDefaultQueue');
my $QueueID = $Kernel::OM->Get('Kernel::System::Queue')->QueueLookup(
Queue => $Queue,
);
if ($QueueID) {
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Debug',
Key => ref($Self),
Value => "MessageID:$GetParam{'Message-ID'} to 'PostmasterDefaultQueue' ( QueueID:${QueueID} ).",
);
return $QueueID;
}
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Error',
Key => ref($Self),
Value => "Couldn't get QueueID for 'PostmasterDefaultQueue' (${Queue}) !",
);
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Debug',
Key => ref($Self),
Value => "MessageID:$GetParam{'Message-ID'} to QueueID:1!",
);
return 1;
}
sub GetTrustedQueueID {
my ( $Self, %Param ) = @_;
# get email headers
my %GetParam = %{ $Param{Params} };
return if !$GetParam{'X-OTRS-Queue'};
$Self->{CommunicationLogObject}->ObjectLog(
ObjectLogType => 'Message',
Priority => 'Debug',
Key => 'Kernel::System::PostMaster::DestQueue',
Value => "Existing X-OTRS-Queue header: $GetParam{'X-OTRS-Queue'} (MessageID:$GetParam{'Message-ID'})!",
);
# get dest queue
return $Kernel::OM->Get('Kernel::System::Queue')->QueueLookup(
Queue => $GetParam{'X-OTRS-Queue'},
);
}
1;
|