]> git.proxmox.com Git - pmg-api.git/commitdiff
RuleDB/Notify: properly en-/decode the mail subject
authorDominik Csapak <d.csapak@proxmox.com>
Wed, 5 Oct 2022 07:49:41 +0000 (09:49 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 5 Oct 2022 16:34:52 +0000 (18:34 +0200)
we need to mime decode the subject after reading it, so that we get
the 'real' subject instead of the (possibly) mime encoded one (which
might be base64 or quoted-printable encoded). To get a proper subject in
the notification mail again, we have to encode it again before passing
it MIME::Entity->build

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
src/PMG/RuleDB/Notify.pm
src/bin/pmg-smtp-filter

index 6b964a6faaf780f4d9c74c6ef6b3590ed3f6aabe..af853a3aa73c7c0f36ab4b7eeda790a80ddfe236 100644 (file)
@@ -6,6 +6,7 @@ use DBI;
 use MIME::Body;
 use MIME::Head;
 use MIME::Entity;
+use MIME::Words qw(encode_mimewords);
 use Encode qw(decode encode);
 
 use PVE::SafeSyslog;
@@ -228,7 +229,7 @@ sub execute {
        Charset => 'UTF-8',
        From    => $from,
        To      => $to,
-       Subject => encode('UTF-8', $subject),
+       Subject => encode_mimewords(encode('UTF-8', $subject), "Charset" => "UTF-8"),
        Data => encode('UTF-8', $body));
 
     if ($self->{attach} eq 'O') {
index 45eb125b4005610ba0b72362efadba52b4531158..eaecd21ebe8575956ef5d40a54b6760575bc901a 100755 (executable)
@@ -9,6 +9,7 @@ use Time::HiRes qw (usleep gettimeofday tv_interval);
 use POSIX qw(:sys_wait_h errno_h signal_h);
 
 use MIME::Parser;
+use MIME::WordDecoder qw(mime_to_perl_string);
 use File::Path;
 use Net::Server::PreFork;
 use Net::Server::SIG qw(register_sig check_sigs);
@@ -152,7 +153,7 @@ sub get_prox_vars {
     } if !$spaminfo;
 
     my $vars = {
-       'SUBJECT' => $entity->head->get ('subject', 0) || 'No Subject',
+       'SUBJECT' => mime_to_perl_string($entity->head->get ('subject', 0) || 'No Subject'),
        'RULE' => $rule->{name},
        'RULE_INFO' => $msginfo->{rule_info},
        'SENDER' => $msginfo->{sender},