From 59ef597f6ebd96d4f933f7bf91814e810fc3f814 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. Also the syntax for Koha::Email has changed and this patch adapts it. Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart --- basket/sendbasket.pl | 86 +++++++++++++++------------------ misc/cronjobs/runreport.pl | 10 ++-- opac/opac-sendbasket.pl | 95 ++++++++++++++++--------------------- opac/opac-sendshelf.pl | 88 ++++++++++++++-------------------- virtualshelves/sendshelf.pl | 86 +++++++++++++-------------------- 5 files changed, 154 insertions(+), 211 deletions(-) diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl index 52ca4797ea..d7e3fbc74b 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; @@ -43,10 +41,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' ) @@ -54,9 +52,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. @@ -108,65 +104,59 @@ 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; + $email->send_or_die({ transport => $library->smtp_server->transport }); + $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 ba0562db70..76dd16019c 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; @@ -56,7 +54,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 @@ -65,13 +62,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( @@ -128,68 +118,67 @@ 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, + reply_to => $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; + $email->transport( $library->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 9f0f5ca0ca..44f2bd130d 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; @@ -60,15 +58,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", @@ -127,72 +118,63 @@ 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; + $email->transport( $library->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 4ee9e46863..a0da25768f 100755 --- a/virtualshelves/sendshelf.pl +++ b/virtualshelves/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; @@ -44,19 +42,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( { @@ -106,68 +98,58 @@ 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; + $email->send_or_die({ transport => $library->smtp_server->transport }); $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.39.5