Task-Server & FailedBackgroundJobsReport: Encoding des E-Mail-Bodys gefixt
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 22 May 2017 09:37:35 +0000 (11:37 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 22 May 2017 09:45:16 +0000 (11:45 +0200)
SL::Mailer erwartet die Einträge in Perls internem Encoding. Daher ist
jegliche Verwendung von Encode::decode(…) falsch.

Zusätzlich muss aber dem Template-Toolkit mitegeteilt werden, dass die
E-Mail-Vorlagen-Datei bereits UTF-8 encodiert wird. Nur dann wandelt
Template die beim Lesen ins interne Encoding um.

Damit spielt nun alles richtig zusammen:

• Daten aus der DB werden vom DB-Treiber in Perls internes Encoding
  gewandelt.
• Die E-Mail-Vorlagendatei wird von Template in Perls internes
  Encoding gewandelt.
• Beim Verschicken wird Perls internes Encoding von Net::SMTP (oder
  welchem Modul auch letztlich genutzt wird) aus Perls internem
  Encoding in das Wire-Format gewandelt.

Behebt #257.

SL/BackgroundJob/FailedBackgroundJobsReport.pm
scripts/task_server.pl

index e0bea8b..a29aea5 100644 (file)
@@ -39,12 +39,12 @@ sub send_email {
     EVAL_PERL   => 0,
     ABSOLUTE    => 1,
     CACHE_SIZE  => 0,
+    ENCODING    => 'utf8',
   }) || die("Could not create Template instance");
 
   my $file_name = $self->data->{template} || 'templates/webpages/failed_background_jobs_report/email.txt';
   my $body;
   $template->process($file_name, { SELF => $self }, \$body);
-  $body = Encode::decode('utf-8', $body);
 
   Mailer->new(
     from         => $self->data->{from},
index 1dbfb45..cfdd866 100755 (executable)
@@ -17,7 +17,6 @@ use Cwd;
 use Daemon::Generic;
 use Data::Dumper;
 use DateTime;
-use Encode qw();
 use English qw(-no_match_vars);
 use File::Spec;
 use List::MoreUtils qw(any);
@@ -158,6 +157,7 @@ sub notify_on_failure {
     EVAL_PERL   => 0,
     ABSOLUTE    => 1,
     CACHE_SIZE  => 0,
+    ENCODING    => 'utf8',
   });
 
   return debug("Could not create Template instance") unless $template;
@@ -174,7 +174,7 @@ sub notify_on_failure {
       subject      => $cfg->{email_subject},
       content_type => 'text/plain',
       charset      => 'utf-8',
-      message      => Encode::decode('utf-8', $body),
+      message      => $body,
     )->send;
 
     1;