Revision e3159b22
Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt
SL/BackgroundJob/FailedBackgroundJobsReport.pm | ||
---|---|---|
39 | 39 |
EVAL_PERL => 0, |
40 | 40 |
ABSOLUTE => 1, |
41 | 41 |
CACHE_SIZE => 0, |
42 |
ENCODING => 'utf8', |
|
42 | 43 |
}) || die("Could not create Template instance"); |
43 | 44 |
|
44 | 45 |
my $file_name = $self->data->{template} || 'templates/webpages/failed_background_jobs_report/email.txt'; |
45 | 46 |
my $body; |
46 | 47 |
$template->process($file_name, { SELF => $self }, \$body); |
47 |
$body = Encode::decode('utf-8', $body); |
|
48 | 48 |
|
49 | 49 |
Mailer->new( |
50 | 50 |
from => $self->data->{from}, |
scripts/task_server.pl | ||
---|---|---|
17 | 17 |
use Daemon::Generic; |
18 | 18 |
use Data::Dumper; |
19 | 19 |
use DateTime; |
20 |
use Encode qw(); |
|
21 | 20 |
use English qw(-no_match_vars); |
22 | 21 |
use File::Spec; |
23 | 22 |
use List::MoreUtils qw(any); |
... | ... | |
158 | 157 |
EVAL_PERL => 0, |
159 | 158 |
ABSOLUTE => 1, |
160 | 159 |
CACHE_SIZE => 0, |
160 |
ENCODING => 'utf8', |
|
161 | 161 |
}); |
162 | 162 |
|
163 | 163 |
return debug("Could not create Template instance") unless $template; |
... | ... | |
174 | 174 |
subject => $cfg->{email_subject}, |
175 | 175 |
content_type => 'text/plain', |
176 | 176 |
charset => 'utf-8', |
177 |
message => Encode::decode('utf-8', $body),
|
|
177 |
message => $body,
|
|
178 | 178 |
)->send; |
179 | 179 |
|
180 | 180 |
1; |
Auch abrufbar als: Unified diff
Task-Server & FailedBackgroundJobsReport: Encoding des E-Mail-Bodys gefixt
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.