Bug 26705: Make Koha::Email->send_or_die handle Bcc
Koha used to rely on Mail::Sendmail for sending emails. As an SMTP
client, the library took the job of extracting Bcc headers (and removing
them) to pass them along with the recipients listed on To: and Cc: to
the SMTP protocol in the form of RCPT TO: lines. [1]
This was overlooked when we moved to Email::Stuffer/Email::Simple and
there's a different behavior, that is a design decision [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 {to} parameter is passed, it extracts the recipients
from the headers, as Mail::Sendmail does, and calls
$self->SUPER::send_or_die with the right parameters.
To test:
1. Apply the regression tests
2. Run:
$ kshell
k$ prove t/Koha/Email.t
=> FAIL: Bcc is not handled correctly!
3. Apply this patch
4. Repeat 2
=> SUCCESS: Tests pass! The recipients list is correct! No Bcc header
sent!
5. Sign off :-D
[1] https://metacpan.org/release/Mail-Sendmail/source/lib/Mail/Sendmail.pm#L331
[2] https://metacpan.org/pod/Email::Sender::Manual::QuickStart#Hey,-where's-my-Bcc-support
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
58a5a04066
commit
ebf9c134d1
|
|
@ -136,4 +136,38 @@ sub create {
|
|||
return $email;
|
||||
}
|
||||
|
||||
=head3 send_or_die
|
||||
|
||||
$email->send_or_die({ transport => $transport [, $args] });
|
||||
|
||||
Overloaded Email::Stuffer I<send_or_die> method, that takes care of Bcc handling.
|
||||
Bcc is removed from the message headers, and included in the recipients list to be
|
||||
passed to I<send_or_die>.
|
||||
|
||||
=cut
|
||||
|
||||
sub send_or_die {
|
||||
my ( $self, $args ) = @_;
|
||||
|
||||
unless ( $args->{to} ) { # don't do it if passed an explicit 'to' param
|
||||
|
||||
my @recipients;
|
||||
|
||||
# extract all recipient addresses from header
|
||||
foreach my $header ( 'To', 'Cc', 'Bcc' ) {
|
||||
push @recipients,
|
||||
map { $_->as_string }
|
||||
$self->email->header_obj->header_as_obj($header)->addresses;
|
||||
}
|
||||
|
||||
# Remove the Bcc header
|
||||
$self->email->header_str_set('Bcc');
|
||||
|
||||
# Tweak $args
|
||||
$args->{to} = \@recipients;
|
||||
}
|
||||
|
||||
$self->SUPER::send_or_die($args);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue