From bddf5d51c570feff4716bc4ce2ee418852d5a432 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 6 Aug 2020 15:07:10 -0300 Subject: [PATCH] Bug 22343: Adapt controller scripts This patch adapts controller scripts that used sendmail. --- basket/sendbasket.pl | 89 ++++++++++++++++------------------ misc/cronjobs/runreport.pl | 10 ++-- opac/opac-sendbasket.pl | 97 +++++++++++++++++-------------------- opac/opac-sendshelf.pl | 90 ++++++++++++++-------------------- virtualshelves/sendshelf.pl | 89 ++++++++++++++-------------------- 5 files changed, 164 insertions(+), 211 deletions(-) diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl index 2076c425fa..094d37507b 100755 --- a/basket/sendbasket.pl +++ b/basket/sendbasket.pl @@ -20,9 +20,7 @@ use Modern::Perl; use CGI qw ( -utf8 ); use Encode qw(encode); use Carp; -use Mail::Sendmail; -use MIME::QuotedPrint; -use MIME::Base64; +use Try::Tiny; use C4::Biblio; use C4::Items; @@ -30,6 +28,7 @@ use C4::Auth; use C4::Output; use C4::Templates (); use Koha::Email; +use Koha::SMTP::Servers; use Koha::Token; my $query = new CGI; @@ -44,10 +43,10 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( } ); -my $bib_list = $query->param('bib_list') || ''; -my $email_add = $query->param('email_add'); +my $bib_list = $query->param('bib_list') || ''; +my $email_add = $query->param('email_add'); -my $dbh = C4::Context->dbh; +my $dbh = C4::Context->dbh; if ( $email_add ) { output_and_exit( $query, $cookie, $template, 'wrong_csrf_token' ) @@ -55,9 +54,7 @@ if ( $email_add ) { session_id => scalar $query->cookie('CGISESSID'), token => scalar $query->param('csrf_token'), }); - my $email = Koha::Email->new(); - my %mail = $email->create_message_headers({ to => $email_add }); - my $comment = $query->param('comment'); + my $comment = $query->param('comment'); # Since we are already logged in, no need to check credentials again # when loading a second template. @@ -109,65 +106,61 @@ if ( $email_add ) { my $template_res = $template2->output(); my $body; + my $subject; # Analysing information and getting mail properties - if ( $template_res =~ /(.*)/s ) { - $mail{subject} = $1; - $mail{subject} =~ s|\n?(.*)\n?|$1|; - $mail{subject} = encode('MIME-Header',$mail{subject}); + if ( $template_res =~ /(?.*)/s ) { + $subject = $+{subject}; + $subject =~ s|\n?(.*)\n?|$1|; } - else { $mail{'subject'} = "no subject"; } + else { + $subject = "no subject"; + } + + my $email = Koha::Email->create( + { + to => $email_add, + subject => $subject, + } + ); my $email_header = ""; if ( $template_res =~ /
(.*)/s ) { $email_header = $1; $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); - } - - my $email_file = "basket.txt"; - if ( $template_res =~ /(.*)/s ) { - $email_file = $1; - $email_file =~ s|\n?(.*)\n?|$1|; + $email_header = Encode::encode("UTF-8", $email_header); } if ( $template_res =~ /(.*)/s ) { $body = $1; $body =~ s|\n?(.*)\n?|$1|; - $body = encode_qp(Encode::encode("UTF-8", $body)); + $body = Encode::encode("UTF-8", $body); } - my $boundary = "====" . time() . "===="; - - # Writing mail - $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; - my $isofile = encode_base64(encode("UTF-8", $iso2709)); - $boundary = '--' . $boundary; - $mail{body} = <param( SENT => "1" ); + $email->text_body( $THE_body ); + $email->attach( + $iso2709, + content_type => 'application/octet-stream', + name => 'basket.iso2709', + disposition => 'attachment', + ); + + try { + my $library = Koha::Patrons->find( $borrowernumber )->library; + my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); + $email->transport( $smtp_server->transport ); + $email->send_or_die; + $template->param( SENT => "1" ); } - else { - # do something if it doesn't work.... - carp "Error sending mail: $Mail::Sendmail::error \n"; + catch { + carp "Error sending mail: $_"; $template->param( error => 1 ); - } + }; + $template->param( email_add => $email_add ); output_html_with_http_headers $query, $cookie, $template->output; } diff --git a/misc/cronjobs/runreport.pl b/misc/cronjobs/runreport.pl index 6732afae9c..1f50483190 100755 --- a/misc/cronjobs/runreport.pl +++ b/misc/cronjobs/runreport.pl @@ -318,12 +318,12 @@ foreach my $report_id (@ARGV) { $message = "$message"; $args->{contenttype} = 'text/html'; } - my $email = Koha::Email->new(); - my %mail = $email->create_message_headers($args); - $mail{Data} = $message; - $mail{Auth} = { user => $username, pass => $password, method => $method } if $username; + my $email = Koha::Email->create( $args ); + my %headers = $email->header_pairs; + $headers{Data} = $message; + $headers{Auth} = { user => $username, pass => $password, method => $method } if $username; - my $msg = MIME::Lite->new(%mail); + my $msg = MIME::Lite->new(%headers); $msg->attach( Type => "text/$format", diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl index d5e6c7fdfd..b6934146e0 100755 --- a/opac/opac-sendbasket.pl +++ b/opac/opac-sendbasket.pl @@ -22,9 +22,7 @@ use Modern::Perl; use CGI qw ( -utf8 ); use Encode qw(encode); use Carp; -use Mail::Sendmail; -use MIME::QuotedPrint; -use MIME::Base64; +use Try::Tiny; use C4::Biblio; use C4::Items; @@ -34,6 +32,7 @@ use C4::Members; use C4::Templates (); use Koha::Email; use Koha::Patrons; +use Koha::SMTP::Servers; use Koha::Token; my $query = new CGI; @@ -57,7 +56,6 @@ if ( $email_add ) { session_id => scalar $query->cookie('CGISESSID'), token => scalar $query->param('csrf_token'), }); - my $email = Koha::Email->new(); my $patron = Koha::Patrons->find( $borrowernumber ); my $borcat = $patron ? $patron->categorycode : q{}; my $user_email = $patron->first_valid_email_address @@ -66,13 +64,6 @@ if ( $email_add ) { my $email_replyto = $patron->firstname . " " . $patron->surname . " <$user_email>"; my $comment = $query->param('comment'); - # if you want to use the KohaAdmin address as from, that is the default no need to set it - my %mail = $email->create_message_headers({ - to => $email_add, - replyto => $email_replyto, - }); - $mail{'X-Abuse-Report'} = C4::Context->preference('KohaAdminEmailAddress'); - # Since we are already logged in, no need to check credentials again # when loading a second template. my $template2 = C4::Templates::gettemplate( @@ -129,68 +120,68 @@ if ( $email_add ) { my $body; # Analysing information and getting mail properties - - if ( $template_res =~ /(.*)/s ) { - $mail{subject} = $1; - $mail{subject} =~ s|\n?(.*)\n?|$1|; - $mail{subject} = encode('MIME-Header',$mail{subject}); + my $subject; + if ( $template_res =~ /\(?.*)\/s ) { + $subject = $+{subject}; + $subject =~ s|\n?(.*)\n?|$1|; + } + else { + $subject = "no subject"; } - else { $mail{'subject'} = "no subject"; } + + # if you want to use the KohaAdmin address as from, that is the default no need to set it + my $email = Koha::Email->create({ + to => $email_add, + replyto => $email_replyto, + subject => $subject, + }); + + $email->header( 'X-Abuse-Report' => C4::Context->preference('KohaAdminEmailAddress') ); my $email_header = ""; if ( $template_res =~ /
(.*)/s ) { $email_header = $1; $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); - } - - my $email_file = "basket.txt"; - if ( $template_res =~ /(.*)/s ) { - $email_file = $1; - $email_file =~ s|\n?(.*)\n?|$1|; + $email_header = Encode::encode("UTF-8", $email_header); } if ( $template_res =~ /(.*)/s ) { $body = $1; $body =~ s|\n?(.*)\n?|$1|; - $body = encode_qp(Encode::encode("UTF-8", $body)); + $body = Encode::encode("UTF-8", $body); } - $mail{body} = $body; - - my $boundary = "====" . time() . "===="; - - $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; - my $isofile = encode_base64(encode("UTF-8", $iso2709)); - $boundary = '--' . $boundary; - $mail{body} = <param( SENT => "1" ); + $email->text_body( $THE_body ); + $email->attach( + $iso2709, + content_type => 'application/octet-stream', + name => 'basket.iso2709', + disposition => 'attachment', + ); + + if ( !defined $iso2709 ) { + carp "Error sending mail: empty basket"; + $template->param( error => 1 ); } else { - # do something if it doesn't work.... - carp "Error sending mail: empty basket" if !defined($iso2709); - carp "Error sending mail: $Mail::Sendmail::error" if $Mail::Sendmail::error; - $template->param( error => 1 ); + try { + my $library = $patron->library; + my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); + $email->transport( $smtp_server->transport ); + $email->send_or_die; + $template->param( SENT => "1" ); + } + catch { + carp "Error sending mail: $_"; + $template->param( error => 1 ); + }; } + $template->param( email_add => $email_add ); output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; } diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl index acbc27e6d2..1a301dd138 100755 --- a/opac/opac-sendshelf.pl +++ b/opac/opac-sendshelf.pl @@ -22,10 +22,8 @@ use Modern::Perl; use CGI qw ( -utf8 ); use Encode qw( encode ); use Carp; +use Try::Tiny; -use Mail::Sendmail; -use MIME::QuotedPrint; -use MIME::Base64; use C4::Auth; use C4::Biblio; use C4::Items; @@ -33,6 +31,7 @@ use C4::Output; use C4::Members; use Koha::Email; use Koha::Patrons; +use Koha::SMTP::Servers; use Koha::Virtualshelves; my $query = new CGI; @@ -61,15 +60,8 @@ my $shelf = Koha::Virtualshelves->find( $shelfid ); if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { if ( $email ) { - my $message = Koha::Email->new(); my $comment = $query->param('comment'); - my %mail = $message->create_message_headers( - { - to => $email, - } - ); - my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( { template_name => "opac-sendshelf.tt", @@ -128,72 +120,64 @@ if ( $email ) { my $template_res = $template2->output(); my $body; + my $subject; # Analysing information and getting mail properties - if ( $template_res =~ /(.*)/s ) { - $mail{subject} = $1; - $mail{subject} =~ s|\n?(.*)\n?|$1|; + if ( $template_res =~ /(?.*)/s ) { + $subject = $+{subject}; + $subject =~ s|\n?(.*)\n?|$1|; + } + else { + $subject = "no subject"; } - else { $mail{'subject'} = "no subject"; } - $mail{subject} = encode('MIME-Header', $mail{subject}); + + my $email = Koha::Email->create( + { + to => $email, + subject => $subject, + } + ); my $email_header = ""; if ( $template_res =~ /
(.*)/s ) { $email_header = $1; $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); - } - - my $email_file = "list.txt"; - if ( $template_res =~ /(.*)/s ) { - $email_file = $1; - $email_file =~ s|\n?(.*)\n?|$1|; + $email_header = Encode::encode("UTF-8", $email_header); } if ( $template_res =~ /(.*)/s ) { $body = $1; $body =~ s|\n?(.*)\n?|$1|; - $body = encode_qp(Encode::encode("UTF-8", $body)); + $body = Encode::encode("UTF-8", $body); } - my $boundary = "====" . time() . "===="; - - # We set and put the multipart content - $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; - - my $isofile = encode_base64(encode("UTF-8", $iso2709)); - $boundary = '--' . $boundary; - - $mail{body} = <param( SENT => "1" ); + $email->text_body( $THE_body ); + $email->attach( + $iso2709, + content_type => 'application/octet-stream', + name => 'list.iso2709', + disposition => 'attachment', + ); + + try { + my $library = Koha::Patrons->find( $borrowernumber )->library; + my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); + $email->transport( $smtp_server->transport ); + $email->send_or_die; + $template->param( SENT => "1" ); } - else { - # do something if it doesn't work.... - carp "Error sending mail: $Mail::Sendmail::error \n"; + catch { + carp "Error sending mail: $_"; $template->param( error => 1 ); - } + }; $template->param( shelfid => $shelfid, - email => $email, + email => $email, ); output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; diff --git a/virtualshelves/sendshelf.pl b/virtualshelves/sendshelf.pl index 0103df3e71..d87287b8cf 100755 --- a/virtualshelves/sendshelf.pl +++ b/virtualshelves/sendshelf.pl @@ -22,15 +22,14 @@ use Modern::Perl; use CGI qw ( -utf8 ); use Encode qw( encode ); use Carp; +use Try::Tiny; -use Mail::Sendmail; -use MIME::QuotedPrint; -use MIME::Base64; use C4::Auth; use C4::Biblio; use C4::Items; use C4::Output; use Koha::Email; +use Koha::SMTP::Servers; use Koha::Virtualshelves; my $query = new CGI; @@ -45,19 +44,13 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -my $shelfid = $query->param('shelfid'); -my $email = $query->param('email'); +my $shelfid = $query->param('shelfid'); +my $to_address = $query->param('email'); my $dbh = C4::Context->dbh; -if ($email) { +if ($to_address) { my $comment = $query->param('comment'); - my $message = Koha::Email->new(); - my %mail = $message->create_message_headers( - { - to => $email - } - ); my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( { @@ -108,68 +101,60 @@ if ($email) { my $template_res = $template2->output(); my $body; + my $subject; # Analysing information and getting mail properties - if ( $template_res =~ /(.*)/s ) { - $mail{subject} = $1; - $mail{subject} =~ s|\n?(.*)\n?|$1|; + if ( $template_res =~ /(?.*)/s ) { + $subject = $+{subject}; + $subject =~ s|\n?(.*)\n?|$1|; + } + else { + $subject = "no subject"; } - else { $mail{'subject'} = "no subject"; } - $mail{subject} = encode( 'MIME-Header', $mail{subject} ); + + my $email = Koha::Email->create( + { + to => $to_address, + subject => $subject, + } + ); my $email_header = ""; if ( $template_res =~ /
(.*)/s ) { $email_header = $1; $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); - } - - my $email_file = "list.txt"; - if ( $template_res =~ /(.*)/s ) { - $email_file = $1; - $email_file =~ s|\n?(.*)\n?|$1|; + $email_header = Encode::encode("UTF-8", $email_header); } if ( $template_res =~ /(.*)/s ) { $body = $1; $body =~ s|\n?(.*)\n?|$1|; - $body = encode_qp(Encode::encode("UTF-8", $body)); + $body = Encode::encode("UTF-8", $body); } - my $boundary = "====" . time() . "===="; - - # We set and put the multipart content - $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; - - my $isofile = encode_base64( encode( "UTF-8", $iso2709 ) ); - $boundary = '--' . $boundary; - - $mail{body} = <text_body( $THE_body ); + $email->attach( + $iso2709, + content_type => 'application/octet-stream', + name => 'shelf.iso2709', + disposition => 'attachment', + ); - # do something if it works.... + try { + my $library = Koha::Patrons->find( $borrowernumber )->library; + my $smtp_server = Koha::SMTP::Servers->get_effective_server({ library => $library }); + $email->transport( $smtp_server->transport ); + $email->send_or_die; $template->param( SENT => "1" ); } - else { - # do something if it doesn't work.... - carp "Error sending mail: $Mail::Sendmail::error \n"; + catch { + carp "Error sending mail: $_"; $template->param( error => 1 ); - } + }; $template->param( email => $email ); output_html_with_http_headers $query, $cookie, $template->output; -- 2.28.0