1# -- 2# Copyright (C) 2001-2020 OTRS AG, https://otrs.com/ 3# -- 4# This software comes with ABSOLUTELY NO WARRANTY. For details, see 5# the enclosed file COPYING for license information (GPL). If you 6# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. 7# -- 8 9use strict; 10use warnings; 11use utf8; 12 13use vars (qw($Self)); 14 15# get helper object 16$Kernel::OM->ObjectParamAdd( 17 'Kernel::System::UnitTest::Helper' => { 18 RestoreDatabase => 1, 19 }, 20); 21my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper'); 22 23# Disable email addresses checking. 24$Helper->ConfigSettingChange( 25 Key => 'CheckEmailAddresses', 26 Value => 0, 27); 28 29# do not really send emails 30$Kernel::OM->Get('Kernel::Config')->Set( 31 Key => 'SendmailModule', 32 Value => 'Kernel::System::Email::DoNotSendEmail', 33); 34 35my $SendEmail = sub { 36 my %Param = @_; 37 38 my $EmailObject = $Kernel::OM->Get('Kernel::System::Email'); 39 my $MailQueueObject = $Kernel::OM->Get('Kernel::System::MailQueue'); 40 41 # Delete mail queue 42 $MailQueueObject->Delete(); 43 44 # Generate the mail and queue it 45 $EmailObject->Send( %Param, ); 46 47 # Get last item in the queue. 48 my $Items = $MailQueueObject->List(); 49 $Items = [ sort { $b->{ID} <=> $a->{ID} } @{$Items} ]; 50 my $LastItem = $Items->[0]; 51 52 my $Result = $MailQueueObject->Send( %{$LastItem} ); 53 54 return { 55 Data => $LastItem->{Message}, 56 }; 57}; 58 59# Check that long references and in-reply-to headers are correctly split across lines. 60# See bug#9345 and RFC5322. 61my $MsgIDShort = '<54DEDF2@xyz-intra.net>'; 62my $MsgIDLong = '<54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net>'; 63 64my @Tests = ( 65 { 66 Name => "Short MSGID 2x", 67 Header => $MsgIDShort x 2, 68 FoldedHeader => '<54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net>', 69 }, 70 71 { 72 Name => "Short MSGID 2x", 73 Header => $MsgIDShort x 10, 74 FoldedHeader => '<54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net> 75 <54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net> 76 <54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net><54DEDF2@xyz-intra.net> 77 <54DEDF2@xyz-intra.net>', 78 }, 79 { 80 Name => "Long MSGID 10x", 81 Header => $MsgIDLong x 10, 82 FoldedHeader => '<54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 83 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 84 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 85 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 86 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 87 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 88 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 89 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 90 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net> 91 <54DEDF2AD94D34F9A6C123E21D7CA6102A2E7HHIDHDGSUFKF@EFNPNCY115.xyz-intra.net>', 92 }, 93); 94 95for my $Test (@Tests) { 96 my $Result = $SendEmail->( 97 From => 'john.smith@example.com', 98 To => 'john.smith2@example.com', 99 Subject => 'some subject', 100 Body => 'Some Body', 101 MimeType => 'text/html', 102 Charset => 'utf8', 103 References => $Test->{Header}, 104 InReplyTo => $Test->{Header}, 105 ); 106 107 my ($ReferencesHeader) = $Result->{Data}->{Header} =~ m{^(References:.*?)(^\S|\z)}xms; 108 my ($InReplyToHeader) = $Result->{Data}->{Header} =~ m{^(In-Reply-To:.*?)(^\S|\z)}xms; 109 110 $Self->Is( 111 $ReferencesHeader, 112 "References: $Test->{FoldedHeader}\n", 113 'Check that references header is split across lines', 114 ); 115 116 $Self->Is( 117 $InReplyToHeader, 118 "In-Reply-To: $Test->{FoldedHeader}\n", 119 'Check that in-reply-to header is split across lines', 120 ); 121} 122 123# call Send a 124 125# 126# Check header security 127# 128$Kernel::OM->Get('Kernel::Config')->Set( 129 Key => 'Secure::DisableBanner', 130 Value => 0, 131); 132 133my $Result = $SendEmail->( 134 From => 'john.smith@example.com', 135 To => 'john.smith2@example.com', 136 Subject => 'some subject', 137 Body => 'Some Body', 138 Type => 'text/html', 139 Charset => 'utf8', 140); 141 142my ($XMailerHeader) = $Result->{Data}->{Header} =~ m{^X-Mailer:\s+(.*?)$}ixms; 143my ($XPoweredByHeader) = $Result->{Data}->{Header} =~ m{^X-Powered-By:\s+(.*?)$}ixms; 144 145my $Product = $Kernel::OM->Get('Kernel::Config')->Get('Product'); 146my $Version = $Kernel::OM->Get('Kernel::Config')->Get('Version'); 147 148$Self->Is( 149 $XMailerHeader, 150 "$Product Mail Service ($Version)", 151 "Default X-Mailer header", 152); 153 154$Self->Is( 155 $XPoweredByHeader, 156 "OTRS (https://otrs.com/)", 157 "Default X-Powered-By header", 158); 159 160$Kernel::OM->Get('Kernel::Config')->Set( 161 Key => 'Secure::DisableBanner', 162 Value => 1, 163); 164 165$Result = $SendEmail->( 166 From => 'john.smith@example.com', 167 To => 'john.smith2@example.com', 168 Subject => 'some subject', 169 Body => 'Some Body', 170 MimeType => 'text/html', 171 Charset => 'utf8', 172); 173 174($XMailerHeader) = $Result->{Data}->{Header} =~ m{^X-Mailer:\s+(.*?)$}ixms; 175($XPoweredByHeader) = $Result->{Data}->{Header} =~ m{^X-Powered-By:\s+(.*?)$}ixms; 176 177$Self->Is( 178 $XMailerHeader, 179 undef, 180 "Disabled X-Mailer header", 181); 182 183$Self->Is( 184 $XPoweredByHeader, 185 undef, 186 "Disabled X-Powered-By header", 187); 188 1891; 190