Proxmox Mail Gateway PMG Spam Report E-Mail anpassen
Aus znilwiki
Changelog:
- 21.04.2025 erste Version
Vorwort
Per Standardeinstellung sieht der Daily Spam Report for so aus:
Ich wollte das ganze etwas anpassen (insbesondere für meine Familie).
Dabei bin ich auf diesen Beitrag im Proxmox-Forum gestoßen: https://forum.proxmox.com/threads/custom-spamreport-template.161367/
Auf Basis dieses Beitrags habe ich meine eigene Version entwickelt.
Template bereitstellen / kopieren
Das per Default verwendete Template liegt unter
/var/lib/pmg/templates/spamreport-verbose.tt
Das sollte man nicht bearbeiten da es bei einem Update/Upgrade überschrieben werden könnte.
Statt dessen müsst Ihr es an einer bestimmten Stelle hinterlegen, die ich aber erst anlegen musste:
Meldet auch als root auf euerem Mailgateway an und nutzt folgende Befehle:
mkdir /etc/pmg/templates cp /var/lib/pmg/templates/spamreport-verbose.tt /etc/pmg/templates/ pmgconfig sync --restart 1
Ab diesem Zeitpunkt nimmt er für die Reports die Kopie in /etc/pmg/templates/.
Template bearbeiten
Die Kopie /etc/pmg/templates/spamreport-verbose.tt könnt Ihr nun bearbeiten:
nano /etc/pmg/templates/spamreport-verbose.tt
und etwas Ändern, z.B. den Titel und Texte auf Deutsch abändern:
[%- IF timespan == 'week' -%] [%- SET title = "Wöchentlicher Spam Report für '${pmail}' - ${date}'" -%] [%- ELSE %] [%- SET title = "Täglicher Spam Report für '${pmail}' - ${date}" -%] [%- END -%]
Ihr seht schon, die Umlaute bitte HTML-Codiert, siehe z.B. https://tecfa.unige.ch/guides/selfhtml/zeichen.htm
Speichern und ... wie schaut man sich diese nun an?
Vorschau des Spam-Reports erhalten
Der Report wird normalerweise täglich um MItternacht versendet.
Mit folgendem Befehl könnte Ihr diesen aber sofort senden:
pmgqm send --receiver bernhard@znil.de
Dafür müsst Ihr aber auch eine Spam-Mail bereit liegen haben, sonst passiert nichts.
Man kann sich auch den Report von gestern senden lassen:
pmgqm send --timespan yesterday --receiver bernhard@znil.de
oder den Report eines anderen an sich senden lassen:
pmgqm send --receiver mysqldumper.backups@znil.net --redirect bernhard@znil.de
Die Zeile senden den Spamreport für mysqldumper.backups@znil.net an bernhard@znil.de
Per
pmgqm status
bekommt Ihr eine Liste aller Benutzer / Email-Adressen für welche ein Report heute anstehen würde:
Count Spamlevel Mail 6 11.00 xxxxx.xxxxxxx@znil.de 2 4.00 xxxx@znil.de 4 8.00 xxxx@xxxxenen.de 1 14.00 xxxxxxx@znil.de 2 20.00 xxxx-xxxxx_xxx@znil.net 3 5.00 bernhard@znil.de 1 3.00 xxxxx@znil.de 1 3.00 xxxx@xxxxenen.de 2 6.50 xxxxxx@znil.de 1 7.00 xxxxxxxxxx.xxxxxxxxxx@znil.de 2 12.00 mysqldumper.backups@znil.net 1 10.00 xxxxxx@znil.de 1 16.00 xxxxxx@znil.de
Die Hilfe zu den Befehlen erhaltet Ihr über
pmgqm help pmgqm help status pmgqm help send
Mein Template
Mein aktuelles Template sieht so aus:
und das ist die Vorlage:
<!DOCTYPE html>
<!-- Checks whether it is a weekly or daily report with date formatting -->
[%- IF timespan == 'week' -%]
[%- SET formatted_date = date.split('-').reverse().join('.') -%]
[%- SET title_plain = "Wöchentlicher Spam-Bericht für '${pmail}' - ${formatted_date}" -%]
[%- SET title_html = "Wöchentlicher Spam-Bericht für<br>'${pmail}' - ${formatted_date}'" -%]
[%- ELSE -%]
[%- SET formatted_date = date.split('-').reverse().join('.') -%]
[%- SET title_plain = "Täglicher Spam-Bericht ${formatted_date} für Email-Adresse: '${pmail}'" -%]
[%- SET title_html = "Täglicher Spam-Bericht ${formatted_date} für Email-Adresse:<br>'${pmail}'" -%]
[%- END -%]
[% BLOCK tooltip %]
Received: [% d.date %] [% d.time %]
From: [% d.envelope_sender %]
TO: [% d.receiver %]
Size: [% d.bytes %]
Score: [% d.spamlevel %]
File: [% d.file %]
[% END %]
<html>
<head>
<title>[% title_plain %]</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f4;
color: #333;
}
.container {
width: 100%;
margin: 20px auto;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
overflow: hidden;
}
p {
margin: 5px 0px 0px 0px;
}
<!-- Header area with color definition -->
.header {
background-color: #0d1e67;
color: #fff;
padding: 10px 20px;
display: flex;
align-items: center;
}
.header img {
height: 60px;
width: 96px;
margin-right: 15px;
}
.header h1 {
font-size: 18px;
margin: 0;
flex: 1;
text-align: left;
}
.content {
padding: 20px;
}
.email-item {
#border-bottom: 2px solid #000000;
padding-bottom: 10px;
}
.email-item:last-child {
#border-bottom: none;
}
.mytable th, td {
border: 1px solid #0d1e67;
border-collapse: collapse;
padding: 8px;
}
.mytable table {
width: 100%;
border-collapse: collapse;
}
.actions a {
text-decoration: none;
font-size: 14px;
color: #0d1e67;
padding: 5px 10px;
border: 1px solid #0d1e67;
border-radius: 3px;
margin: 55px;
# padding-top: 100px;
}
.actions a:hover {
background-color: #000000;
color: #fff;
}
.footer {
text-align: center;
padding: 10px;
background-color: #f9f9f9;
font-size: 18px;
color: #666;
width: 100%
}
hr {
border: none;
height: 3px;
color: #880000;
background-color: #880000;
}
</style>
</head>
<body>
<!-- Start of the actual e-mail structure -->
<table align="center" class="container" cellspacing="0" cellpadding="0" width="600">
<tr>
<td class="header" style="background: #FFCC00; color: #000000; padding: 10px 20px; display: flex; align-items: center;">
<!-- Insert your Logo here -->
<!-- <img src="https://somecoolurl.com/pmg.png" alt="Logo" style="height: 60px; width: 96px;"> -->
<h1>[% title_html %]</h1>
</td>
</tr>
</table>
<br>
<table class="footer">
<tr>
<td>
<!-- <td class="footer"> -->
<!-- Footer area with disclaimer -->
<p>Verwalte Deine Spam-Quarantäne über das <a href="[% managehref | url %]">Webinterface</a>.</p>
<!-- <p>Bereitgestellt von <a href="https://www.somecoolurl.com" target="_blank">My Website</a> - Disclaimer or something</p> -->
</td>
</tr>
</table>
<br>
<!-- #<table> -->
<!-- #<tr> -->
<!-- <td class="content"> -->
[% FOREACH item IN items %]
<div class="email-item">
<table class="mytable">
<tr>
<td><strong>Absender:</strong></th>
<td>[% item.from %]</th>
</tr>
<tr>
<td><strong>Betreff:</strong></td>
<td><a href="[% item.href | url %]">[% item.subject %]</a></td>
</tr>
<tr>
<td><strong>Erhalten:</strong></td>
<td>[% item.date.split('-').reverse().join('.') %] um [% item.time %] Uhr</td>
</tr>
</table>
<br>
<div class="actions">
<a href="[% item.href | url %]&action=whitelist">Whitelist</a>
<a href="[% item.href | url %]&action=blacklist">Blacklist</a>
<a href="[% item.href | url %]&action=deliver">Zustellen</a>
<a href="[% item.href | url %]&action=delete">Löschen</a>
</div>
<br>
<hr>
<br>
[% END %]
<!-- </td> -->
<!-- </tr> -->
<br>
<table class="footer">
<tr>
<td>
<!-- <td class="footer"> -->
<!-- Footer area with disclaimer -->
<p>Verwalte Deine Spam-Quarantäne über das <a href="[% managehref | url %]">Webinterface</a>.</p>
<!-- <p>Bereitgestellt von <a href="https://www.somecoolurl.com" target="_blank">My Website</a> - Disclaimer or something</p> -->
</td>
</tr>
</table>
</body>
</html>