From 6697556bb077306aedf919dcd0ad7d230d849456 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Tue, 19 Oct 2021 16:57:25 +0100 Subject: [PATCH] Bug 28729: Make Koha::Email->send_or_die handle returnpath Content-Type: text/plain; charset=utf-8 Koha used to rely on Mail::Sendmail for sending emails. As an SMTP client, the library would extract the from address from the Sender header to pass along in the MAIL FROM: field of the SMTP protocol [1]. This was overlooked when we moved to Email::Stuffer/Email::Simple and there's a different behavior as it expects the envelope to be passed and falls back to extracting the 'From' header when said envelope is not found [2]. This patchset re-introduces the behavior from Mail::Sendmail by overriding the send_or_die method locally (in Koha::Email) and doing the right thing. Unless an explicit {from} parameter is passed, it extracts the MAIL FROM envelope from the Sender header, as Mail::Sendmail did, and calls $self->SUPER::send_or_die with the right parameters. To test: 1. Apply the unit tests 2. Run: $ kshell k$ prove t/Koha/Email.t => FAIL: Sender is not handled correctly! 3. Apply this patch 4. Repeat 2 => SUCCESS: Tests pass! The from parameter is correct! No Sender header sent! 5. Sign off :-D [1] https://metacpan.org/dist/Mail-Sendmail/source/lib/Mail/Sendmail.pm#L284 [2] https://metacpan.org/pod/Email::Sender::Manual::QuickStart#envelope-information Signed-off-by: David Nind Signed-off-by: Marcel de Rooy AMENDED (SHORTENED) - my @headers = $self->email->header_str_pairs; - foreach my $pair ( pairs @headers ) { - my ( $header, $value ) = @$pair; - $args->{from} = $value if $header eq 'Sender'; - } - - # Remove the Sender header - $self->email->header_str_set('Sender'); + $args->{from} = $self->email->header_str('Sender'); + $self->email->header_str_set('Sender'); # remove Sender header Tested with same results (scrambled domains): From: noreply@mydevserver.com Cc: marcel@email.nl To: test@somewhere.nl Reply-To: bieb@mydevserver.com Return-Path: postmaster@mydevserver.com --- Koha/Email.pm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Koha/Email.pm b/Koha/Email.pm index cac63763ab..f3f0eee7e1 100644 --- a/Koha/Email.pm +++ b/Koha/Email.pm @@ -177,6 +177,11 @@ sub send_or_die { $args->{to} = \@recipients; } + unless ( $args->{from} ) { # don't do it if passed an explicit 'from' param + $args->{from} = $self->email->header_str('Sender'); + $self->email->header_str_set('Sender'); # remove Sender header + } + $self->SUPER::send_or_die($args); } -- 2.20.1