public inbox for pmg-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pmg-devel] [PATCH pmg-api v3 0/3] add plain-text variants for both reports
@ 2025-09-19  8:36 Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Hannes Laimer @ 2025-09-19  8:36 UTC (permalink / raw)
  To: pmg-devel

This addresses both #1621 and #4023.

https://bugzilla.proxmox.com/show_bug.cgi?id=4023
https://bugzilla.proxmox.com/show_bug.cgi?id=1621

v3, thanks @Stoiko, @Thomas:
 - small helper for decode+utf8-encode
 - restructure verbose spam report template
 - re-add `subject:` line to plain templates

v2, thanks @Thomas:
 - UTF-8 encode plain-text subject/sender/from before using in templates
 - remove `subject:` line from plain template, this is not needed in that
   part of the mail

Hannes Laimer (3):
  pmgqm: add plain subject/from fields for reports
  fix #1621: templates: add plain-text variant of short/verbose spam
    report
  fix #4023: templates: add plain-text variant of admin report

 src/Makefile                              |  3 ++
 src/PMG/CLI/pmgqm.pm                      | 16 +++++--
 src/PMG/Utils.pm                          |  9 ++++
 src/templates/pmgreport.plain.tt          | 51 +++++++++++++++++++++++
 src/templates/spamreport-short.plain.tt   | 17 ++++++++
 src/templates/spamreport-verbose.plain.tt | 22 ++++++++++
 6 files changed, 114 insertions(+), 4 deletions(-)
 create mode 100644 src/templates/pmgreport.plain.tt
 create mode 100644 src/templates/spamreport-short.plain.tt
 create mode 100644 src/templates/spamreport-verbose.plain.tt

-- 
2.47.3



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [pmg-devel] [PATCH pmg-api v3 1/3] pmgqm: add plain subject/from fields for reports
  2025-09-19  8:36 [pmg-devel] [PATCH pmg-api v3 0/3] add plain-text variants for both reports Hannes Laimer
@ 2025-09-19  8:36 ` Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer
  2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2025-09-19  8:36 UTC (permalink / raw)
  To: pmg-devel

We don't want plain-text reports to contain HTML-escaped chars,
this skips html encoding for the plain-text part.

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
v3:
- add small helper for 1522_decode+utf8_encode

 src/PMG/CLI/pmgqm.pm | 16 ++++++++++++----
 src/PMG/Utils.pm     |  9 +++++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/PMG/CLI/pmgqm.pm b/src/PMG/CLI/pmgqm.pm
index 41f9f1a..0c30dbe 100755
--- a/src/PMG/CLI/pmgqm.pm
+++ b/src/PMG/CLI/pmgqm.pm
@@ -45,17 +45,25 @@ sub get_item_data {
 
     $item->{id} = sprintf("C%dR%dT%d", $ref->{cid}, $ref->{rid}, $ref->{ticketid});
 
-    $item->{subject} =
-        PMG::Utils::rfc1522_to_html(PVE::Tools::trim($head->get('subject')) || 'No Subject');
+    my $raw_subject = PVE::Tools::trim($head->get('subject')) || 'No Subject';
+    $item->{subject} = PMG::Utils::rfc1522_to_html($raw_subject);
+    $item->{subject_plain} = PMG::Utils::rfc1522_to_plain_utf8($raw_subject);
 
-    my $from = PMG::Utils::rfc1522_to_html(PVE::Tools::trim($head->get('from') // $ref->{sender}));
-    my $sender = PMG::Utils::rfc1522_to_html(PVE::Tools::trim($head->get('sender')));
+    my $raw_from = PVE::Tools::trim($head->get('from') // $ref->{sender});
+    my $from = PMG::Utils::rfc1522_to_html($raw_from);
+    my $from_plain = PMG::Utils::rfc1522_to_plain_utf8($raw_from);
+
+    my $raw_sender = PVE::Tools::trim($head->get('sender'));
+    my $sender = PMG::Utils::rfc1522_to_html($raw_sender);
+    my $sender_plain = PMG::Utils::rfc1522_to_plain_utf8($raw_sender);
 
     if ($sender) {
         $item->{sender} = $sender;
         $item->{from} = sprintf("%s on behalf of %s", $sender, $from);
+        $item->{from_plain} = sprintf("%s on behalf of %s", $sender_plain, $from_plain);
     } else {
         $item->{from} = $from;
+        $item->{from_plain} = $from_plain;
     }
 
     $item->{envelope_sender} = $ref->{sender};
diff --git a/src/PMG/Utils.pm b/src/PMG/Utils.pm
index 3dc909d..4e35aec 100644
--- a/src/PMG/Utils.pm
+++ b/src/PMG/Utils.pm
@@ -1194,6 +1194,15 @@ sub decode_rfc1522 {
     return $res;
 }
 
+sub rfc1522_to_plain_utf8 {
+    my ($enc) = @_;
+
+    my $res = eval { Encode::encode('UTF-8', decode_rfc1522($enc)) };
+    return $enc if $@;
+
+    return $res;
+}
+
 sub rfc1522_to_html {
     my ($enc) = @_;
 
-- 
2.47.3



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [pmg-devel] [PATCH pmg-api v3 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report
  2025-09-19  8:36 [pmg-devel] [PATCH pmg-api v3 0/3] add plain-text variants for both reports Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
@ 2025-09-19  8:36 ` Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer
  2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2025-09-19  8:36 UTC (permalink / raw)
  To: pmg-devel

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
v3:
- drop link for individual mail, now just one link on top for management
- add actually needed `subject:` line back in

 src/Makefile                              |  2 ++
 src/templates/spamreport-short.plain.tt   | 17 +++++++++++++++++
 src/templates/spamreport-verbose.plain.tt | 22 ++++++++++++++++++++++
 3 files changed, 41 insertions(+)
 create mode 100644 src/templates/spamreport-short.plain.tt
 create mode 100644 src/templates/spamreport-verbose.plain.tt

diff --git a/src/Makefile b/src/Makefile
index 6c4246f..54825e2 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -27,7 +27,9 @@ TEMPLATES =				\
 	fetchmailrc.tt			\
 	pmgreport.tt			\
 	spamreport-verbose.tt		\
+	spamreport-verbose.plain.tt	\
 	spamreport-short.tt		\
+	spamreport-short.plain.tt	\
 	main.cf.in			\
 	main.cf.in.demo			\
 	master.cf.in			\
diff --git a/src/templates/spamreport-short.plain.tt b/src/templates/spamreport-short.plain.tt
new file mode 100644
index 0000000..8ac89b4
--- /dev/null
+++ b/src/templates/spamreport-short.plain.tt
@@ -0,0 +1,17 @@
+[% IF timespan == 'week' -%]
+[% SET title = "Weekly Spam Report for '${pmail}' - ${date}'" -%]
+[% ELSIF timespan.substr(timespan.length - 1) == 'h' -%]
+[% SET title = "Spam Report (last ${timespan}) for '${pmail}' - ${date}" -%]
+[% ELSE -%]
+[% SET title = "Daily Spam Report for '${pmail}' - ${date}" -%]
+[% END -%]
+subject: [% title %]
+You received [% mailcount %] spam mail(s).
+
+[% SET links = [] %]
+Manage your spam quarantine: [% n = links.size + 1; links.push(managehref); %][[% n %]]
+Powered by Proxmox: [% n = links.size + 1; links.push('http://www.proxmox.com'); %][[% n %]]
+
+Links:
+[% FOREACH l IN links %][% loop.index + 1 %]: [% l %]
+[% END %]
diff --git a/src/templates/spamreport-verbose.plain.tt b/src/templates/spamreport-verbose.plain.tt
new file mode 100644
index 0000000..029a2e9
--- /dev/null
+++ b/src/templates/spamreport-verbose.plain.tt
@@ -0,0 +1,22 @@
+[% IF timespan == 'week' -%]
+[% SET title = "Weekly Spam Report for '${pmail}' - ${date}'" -%]
+[% ELSIF timespan.substr(timespan.length - 1) == 'h' -%]
+[% SET title = "Spam Report (last ${timespan}) for '${pmail}' - ${date}" -%]
+[% ELSE -%]
+[% SET title = "Daily Spam Report for '${pmail}' - ${date}" -%]
+[% END -%]
+subject: [% title %]
+[% IF items.size -%]
+[% items.size %] spam quarantine entries for [% pmail %]:
+
+Manage your spam quarantine: [% managehref %]
+
+[% FOREACH item IN items %]
+- [% item.date %] [% item.time %] From: [% item.from_plain %]
+  Subject: [% item.subject_plain %]
+
+[% END %]
+[% ELSE %]
+No spam entries for the selected period.
+[% END %]
+Powered by Proxmox: https://www.proxmox.com
-- 
2.47.3



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [pmg-devel] [PATCH pmg-api v3 3/3] fix #4023: templates: add plain-text variant of admin report
  2025-09-19  8:36 [pmg-devel] [PATCH pmg-api v3 0/3] add plain-text variants for both reports Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
  2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
@ 2025-09-19  8:36 ` Hannes Laimer
  2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2025-09-19  8:36 UTC (permalink / raw)
  To: pmg-devel

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
v3:
- add `subkect:` lien back in

 src/Makefile                     |  1 +
 src/templates/pmgreport.plain.tt | 51 ++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
 create mode 100644 src/templates/pmgreport.plain.tt

diff --git a/src/Makefile b/src/Makefile
index 54825e2..a554a63 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -26,6 +26,7 @@ CONF_MANS= pmg.conf.5 cluster.conf.5
 TEMPLATES =				\
 	fetchmailrc.tt			\
 	pmgreport.tt			\
+	pmgreport.plain.tt		\
 	spamreport-verbose.tt		\
 	spamreport-verbose.plain.tt	\
 	spamreport-short.tt		\
diff --git a/src/templates/pmgreport.plain.tt b/src/templates/pmgreport.plain.tt
new file mode 100644
index 0000000..a46d20e
--- /dev/null
+++ b/src/templates/pmgreport.plain.tt
@@ -0,0 +1,51 @@
+subject: Proxmox Status Report - [% date %] ([% fqdn %])
+[% IF cluster -%]
+Cluster Status
+[% FOREACH item IN cluster -%]
+- Hostname: [% item.hostname %]
+  IP Address: [% item.ip %]
+  Role: [% item.type %]
+  State: [% item.state %]
+  Load: [% item.loadavg1 %]
+  Memory: [% item.memory %]
+  Disk: [% item.disk %]
+[% IF !loop.last %]----
+[% END %]
+[% END %]
+[% END %]
+[% IF system -%]
+System Status
+[% FOREACH item IN system -%]
+- [% item.text %]: [% item.value %]
+[% END %]
+[% END %]
+[% IF incoming -%]
+Incoming Mails (24 hours)
+[% FOREACH item IN incoming -%]
+- [% item.text %][% IF item.percentage.defined %] ([% item.percentage %]%)[% END %]: [% item.value %]
+[% END %]
+[% END %]
+[% IF outgoing -%]
+Outgoing Mails (24 hours)
+[% FOREACH item IN outgoing -%]
+- [% item.text %][% IF item.percentage.defined %] ([% item.percentage %]%)[% END %]: [% item.value %]
+[% END %]
+[% END %]
+[% IF virusstat -%]
+Virus Charts (Top 10)
+[% FOREACH item IN virusstat -%]
+- [% item.name %]: [% item.count %]
+[% END %]
+[% END %]
+[% IF virusquar -%]
+Virus Quarantine
+[% FOREACH item IN virusquar -%]
+- [% item.text %]: [% item.value %]
+[% END %]
+[% END %]
+[% IF spamquar -%]
+Spam Quarantine
+[% FOREACH item IN spamquar -%]
+- [% item.text %]: [% item.value %]
+[% END %]
+[% END %]
-- 
2.47.3



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-09-19  8:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-19  8:36 [pmg-devel] [PATCH pmg-api v3 0/3] add plain-text variants for both reports Hannes Laimer
2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
2025-09-19  8:36 ` [pmg-devel] [PATCH pmg-api v3 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal