* [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports
@ 2025-09-18 10:30 Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 10:30 UTC (permalink / raw)
To: pmg-devel
This addresses both #1621 and #4023. The plain-text parts are a little
"spacey", but overall I think the formatting is fine.
https://bugzilla.proxmox.com/show_bug.cgi?id=4023
https://bugzilla.proxmox.com/show_bug.cgi?id=1621
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 | 17 ++++++--
src/templates/pmgreport.plain.tt | 51 +++++++++++++++++++++++
src/templates/spamreport-short.plain.tt | 21 ++++++++++
src/templates/spamreport-verbose.plain.tt | 25 +++++++++++
5 files changed, 113 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] 7+ messages in thread
* [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports
2025-09-18 10:30 [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
@ 2025-09-18 10:30 ` Hannes Laimer
2025-09-18 13:21 ` Thomas Lamprecht
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 10:30 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>
---
src/PMG/CLI/pmgqm.pm | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/PMG/CLI/pmgqm.pm b/src/PMG/CLI/pmgqm.pm
index 41f9f1a..acac284 100755
--- a/src/PMG/CLI/pmgqm.pm
+++ b/src/PMG/CLI/pmgqm.pm
@@ -45,17 +45,26 @@ 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::decode_rfc1522($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 $raw_sender = PVE::Tools::trim($head->get('sender'));
+
+ my $from = PMG::Utils::rfc1522_to_html($raw_from);
+ my $sender = PMG::Utils::rfc1522_to_html($raw_sender);
+
+ my $from_plain = PMG::Utils::decode_rfc1522($raw_from);
+ my $sender_plain = PMG::Utils::decode_rfc1522($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};
--
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] 7+ messages in thread
* [pmg-devel] [PATCH pmg-api 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report
2025-09-18 10:30 [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
@ 2025-09-18 10:30 ` Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer
2025-09-18 14:33 ` [pmg-devel] superseded: [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
3 siblings, 0 replies; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 10:30 UTC (permalink / raw)
To: pmg-devel
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
src/Makefile | 2 ++
src/templates/spamreport-short.plain.tt | 21 +++++++++++++++++++
src/templates/spamreport-verbose.plain.tt | 25 +++++++++++++++++++++++
3 files changed, 48 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 896319b..b75c818 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..b79ee04
--- /dev/null
+++ b/src/templates/spamreport-short.plain.tt
@@ -0,0 +1,21 @@
+[% 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..641eb03
--- /dev/null
+++ b/src/templates/spamreport-verbose.plain.tt
@@ -0,0 +1,25 @@
+[%- 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 %]
+[% SET links = [] -%]
+[% IF items.size -%]
+Spam quarantine entries for [% pmail %]:
+
+[% FOREACH item IN items %]
+- [% item.date %] [% item.time %] From: [% item.from_plain %]
+ Subject: [% item.subject_plain %] [% n = links.size + 1; links.push(item.href); %][[% n %]]
+
+[% END %]
+[% ELSE %]
+No spam entries for the selected period.
+[% END %]
+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 %]
--
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] 7+ messages in thread
* [pmg-devel] [PATCH pmg-api 3/3] fix #4023: templates: add plain-text variant of admin report
2025-09-18 10:30 [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
@ 2025-09-18 10:30 ` Hannes Laimer
2025-09-18 14:33 ` [pmg-devel] superseded: [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
3 siblings, 0 replies; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 10:30 UTC (permalink / raw)
To: pmg-devel
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
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 b75c818..2c5ef28 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] 7+ messages in thread
* Re: [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
@ 2025-09-18 13:21 ` Thomas Lamprecht
2025-09-18 14:08 ` Hannes Laimer
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Lamprecht @ 2025-09-18 13:21 UTC (permalink / raw)
To: Hannes Laimer, pmg-devel
Am 18.09.25 um 12:31 schrieb Hannes Laimer:
> 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>
> ---
> src/PMG/CLI/pmgqm.pm | 17 +++++++++++++----
> 1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/PMG/CLI/pmgqm.pm b/src/PMG/CLI/pmgqm.pm
> index 41f9f1a..acac284 100755
> --- a/src/PMG/CLI/pmgqm.pm
> +++ b/src/PMG/CLI/pmgqm.pm
> @@ -45,17 +45,26 @@ 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::decode_rfc1522($raw_subject);
Not sure as I did not check in depth, but should the result from decode_rfc1522
above also get encoded as UTF-8 to avoid issues with odd characters?
>
> - 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 $raw_sender = PVE::Tools::trim($head->get('sender'));
> +
> + my $from = PMG::Utils::rfc1522_to_html($raw_from);
> + my $sender = PMG::Utils::rfc1522_to_html($raw_sender);
> +
> + my $from_plain = PMG::Utils::decode_rfc1522($raw_from);
> + my $sender_plain = PMG::Utils::decode_rfc1522($raw_sender);
same here I think.
>
> 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};
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports
2025-09-18 13:21 ` Thomas Lamprecht
@ 2025-09-18 14:08 ` Hannes Laimer
0 siblings, 0 replies; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 14:08 UTC (permalink / raw)
To: Thomas Lamprecht, pmg-devel
On 18.09.25 15:21, Thomas Lamprecht wrote:
> Am 18.09.25 um 12:31 schrieb Hannes Laimer:
>> 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>
>> ---
>> src/PMG/CLI/pmgqm.pm | 17 +++++++++++++----
>> 1 file changed, 13 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/PMG/CLI/pmgqm.pm b/src/PMG/CLI/pmgqm.pm
>> index 41f9f1a..acac284 100755
>> --- a/src/PMG/CLI/pmgqm.pm
>> +++ b/src/PMG/CLI/pmgqm.pm
>> @@ -45,17 +45,26 @@ 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::decode_rfc1522($raw_subject);
>
> Not sure as I did not check in depth, but should the result from decode_rfc1522
> above also get encoded as UTF-8 to avoid issues with odd characters?
>
did some digging, and yes, that seems to be the problem.
```
# assume enc contains utf-8 and mime-encoded data returns a perl-string
(with wide characters)
sub decode_rfc1522 {
...
```
the template does not like getting `wide characters`, a
`Encode::encode('UTF-8', $plaintext)`
solves the problem. `rfc1522_to_html` already does basically this, and
`decode_rfc1522` does not. I'll fix that and send a v2.
Thanks for testing!
>>
>> - 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 $raw_sender = PVE::Tools::trim($head->get('sender'));
>> +
>> + my $from = PMG::Utils::rfc1522_to_html($raw_from);
>> + my $sender = PMG::Utils::rfc1522_to_html($raw_sender);
>> +
>> + my $from_plain = PMG::Utils::decode_rfc1522($raw_from);
>> + my $sender_plain = PMG::Utils::decode_rfc1522($raw_sender);
>
> same here I think.
>
>>
>> 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};
>
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] superseded: [PATCH pmg-api 0/3] adds plain-text variants for both reports
2025-09-18 10:30 [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
` (2 preceding siblings ...)
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer
@ 2025-09-18 14:33 ` Hannes Laimer
3 siblings, 0 replies; 7+ messages in thread
From: Hannes Laimer @ 2025-09-18 14:33 UTC (permalink / raw)
To: pmg-devel
superseded-by:
https://lore.proxmox.com/pmg-devel/20250918143142.248758-1-h.laimer@proxmox.com/T/#t
On 18.09.25 12:31, Hannes Laimer wrote:
> This addresses both #1621 and #4023. The plain-text parts are a little
> "spacey", but overall I think the formatting is fine.
>
> https://bugzilla.proxmox.com/show_bug.cgi?id=4023
> https://bugzilla.proxmox.com/show_bug.cgi?id=1621
>
> 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 | 17 ++++++--
> src/templates/pmgreport.plain.tt | 51 +++++++++++++++++++++++
> src/templates/spamreport-short.plain.tt | 21 ++++++++++
> src/templates/spamreport-verbose.plain.tt | 25 +++++++++++
> 5 files changed, 113 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
>
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-09-18 14:33 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-18 10:30 [pmg-devel] [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 1/3] pmgqm: add plain subject/from fields for reports Hannes Laimer
2025-09-18 13:21 ` Thomas Lamprecht
2025-09-18 14:08 ` Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 2/3] fix #1621: templates: add plain-text variant of short/verbose spam report Hannes Laimer
2025-09-18 10:30 ` [pmg-devel] [PATCH pmg-api 3/3] fix #4023: templates: add plain-text variant of admin report Hannes Laimer
2025-09-18 14:33 ` [pmg-devel] superseded: [PATCH pmg-api 0/3] adds plain-text variants for both reports Hannes Laimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox