Files
2024-10-14 00:08:40 +02:00

158 lines
4.5 KiB
Perl

# --
# Copyright (C) 2001-2019 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;