Inhaltsverzeichnis
Postfix CentOS 7 - FooterMilter einbinden (footermilter)
FooterMilter ist ein Sendmail/Postfix
-milter Dienst/Daemon, der vom MTA empfangene E-Mails automatisch einen Footer/Disclaimer an den body
der E-Mail im entsprechenden Format (text/plain
, text/html
oder auch multipart
) anhängt, bevor die Nachricht weiter an den/die Empfänger weitergeleitet wird.
FooterMilter ist ein von Klaus Tachtler ( mir) in Java geschriebener Milter, welcher auf der großartigen Arbeit von Dmitry basiert, welche ebenfalls als eigenes Projekt unter GitHub - nightcode/jmilter verfügbar ist.
GitHub - nightcode/jmilter is an Open Source implementation of the Sendmail milter protocol, for implementing milters in Java that can interface with the Sendmail or Postfix MTA. Java implementation of the Sendmail Milter protocol based on the project of org.nightcode.jmilter
from dmitry@nightcode.org
Beschreibung | Externer Link |
---|---|
GitHub | https://github.com/tachtler/FooterMilter |
Log4j-Dokumentation | https://logging.apache.org/log4j/2.x/manual/configuration.html |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Voraussetzungen
Da der FooterMilter in Java geschrieben ist, ist es erforderlich Java zu installieren, damit der FooterMilter lauffähig ist. Dazu kann das für die meisten Betriebssysteme verfügbare OpenJDK ab Version 1.8 installiert werden.
Als einzige Voraussetzung für die Installation von FooterMilter ist somit nur folgende Komponente erforderlich:
- Lauffähiger Java-Installation z.B. OpenJDK ab Version 1.8
- Siehe auch den internen Link: Postfix CentOS 7 - FooterMilter einsetzen (footermilter) - Installation: Java
WICHTIG - Nachfolgende Abhängigkeiten zu anderen Java-Archivdateien sind in dem zu herunterzuladendem
- Paket von FooterMilter
bereits enthalten!
HINWEIS - Nachfolgende Abhängigkeiten müssen NICHT separat heruntergeladen werden (Auflistung der Vollständigkeit halber)!
Es gibt zwei verschiedene Möglichkeiten FooterMilter zum Einsatz zu bringen.
- Herunterladen der bereits vorhandenen ausführbaren Java -
FooterMilter.jar
-Archivdatei und deren Abhängigkeiten als Paket. - Umwandlung und Erstellung der ausführbaren Java -
FooterMilter.jar
-Archivdatei aus den Quellen unter Einbeziehung der benötigten Abhängigkeiten als Paket.
Nachfolgend werden beide Möglichkeiten beschrieben.
Herunterladen
Unter nachfolgendem externen Link, kann die ausführbare Java - FooterMilter.jar
-Archivdatei und die benötigten Abhängigkeiten als Paket heruntergeladen werden:
- externer Link: GitHub - tachtler/FooterMilter
Unter nachfolgendem externen Link, können die Quellen der ausführbaren Java - FooterMilter.jar
-Archivdatei und die benötigten Abhängigkeiten als Paket ebenfalls heruntergeladen werden:
- externer Link: GitHub - tachtler/FooterMilter - Download master.zip
Installation: Java
Da der FooterMilter in Java geschrieben ist, ist es erforderlich Java zu installieren, damit der FooterMilter lauffähig ist. Dazu kann das für die meisten Betriebssysteme verfügbare OpenJDK ab Version 1.8 installiert werden.
JRE (Fertige JAR-Datei)
Falls der FooterMilter als (Fertige JAR-Datei) installiert werden soll wird nur die Java Runtime Environment (Java-Laufzeitumgebung) benötigt.
# yum install java-1.8.0-openjdk Loaded plugins: changelog, priorities 325 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.191.b12-0.el7_5 will be installed --> Processing Dependency: java-1.8.0-openjdk-headless(x86-64) = 1:1.8.0.191.b12-0.el7_5 for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libpng15.so.15(PNG15_0)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjvm.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjpeg.so.62(LIBJPEG_6.2)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjava.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: fontconfig(x86-64) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libpng15.so.15()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjvm.so()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjpeg.so.62()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libjava.so()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libgif.so.4()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libXtst.so.6()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libXrender.so.1()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libXi.so.6()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libXext.so.6()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libXcomposite.so.1()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: libX11.so.6()(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 --> Running transaction check ---> Package fontconfig.x86_64 0:2.10.95-11.el7 will be installed --> Processing Dependency: fontpackages-filesystem for package: fontconfig-2.10.95-11.el7.x86_64 --> Processing Dependency: font(:lang=en) for package: fontconfig-2.10.95-11.el7.x86_64 ---> Package giflib.x86_64 0:4.1.6-9.el7 will be installed --> Processing Dependency: libSM.so.6()(64bit) for package: giflib-4.1.6-9.el7.x86_64 --> Processing Dependency: libICE.so.6()(64bit) for package: giflib-4.1.6-9.el7.x86_64 ---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.191.b12-0.el7_5 will be installed --> Processing Dependency: tzdata-java >= 2015d for package: 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: copy-jdk-configs >= 2.2 for package: 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: lksctp-tools(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_64 --> Processing Dependency: jpackage-utils for package: 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_64 ---> Package libX11.x86_64 0:1.6.5-1.el7 will be installed --> Processing Dependency: libX11-common >= 1.6.5-1.el7 for package: libX11-1.6.5-1.el7.x86_64 --> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.6.5-1.el7.x86_64 ---> Package libXcomposite.x86_64 0:0.4.4-4.1.el7 will be installed ---> Package libXext.x86_64 0:1.3.3-3.el7 will be installed ---> Package libXi.x86_64 0:1.7.9-1.el7 will be installed ---> Package libXrender.x86_64 0:0.9.10-1.el7 will be installed ---> Package libXtst.x86_64 0:1.2.3-1.el7 will be installed ---> Package libjpeg-turbo.x86_64 0:1.2.90-5.el7 will be installed ---> Package libpng.x86_64 2:1.5.13-7.el7_2 will be installed ---> Package xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 will be installed --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: ttmkfdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Processing Dependency: mkfontdir for package: xorg-x11-fonts-Type1-7.5-9.el7.noarch --> Running transaction check ---> Package copy-jdk-configs.noarch 0:3.3-10.el7_5 will be installed ---> Package fontpackages-filesystem.noarch 0:1.44-8.el7 will be installed ---> Package javapackages-tools.noarch 0:3.4.1-11.el7 will be installed --> Processing Dependency: python-javapackages = 3.4.1-11.el7 for package: javapackages-tools-3.4.1-11.el7.noarch --> Processing Dependency: libxslt for package: javapackages-tools-3.4.1-11.el7.noarch ---> Package libICE.x86_64 0:1.0.9-9.el7 will be installed ---> Package libSM.x86_64 0:1.2.2-2.el7 will be installed ---> Package libX11-common.noarch 0:1.6.5-1.el7 will be installed ---> Package libxcb.x86_64 0:1.12-1.el7 will be installed --> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.12-1.el7.x86_64 ---> Package lksctp-tools.x86_64 0:1.0.17-2.el7 will be installed ---> Package lyx-fonts.noarch 0:2.2.3-1.el7 will be installed ---> Package ttmkfdir.x86_64 0:3.0.9-42.el7 will be installed ---> Package tzdata-java.noarch 0:2018f-2.el7 will be installed ---> Package xorg-x11-font-utils.x86_64 1:7.5-20.el7 will be installed --> Processing Dependency: libfontenc.so.1()(64bit) for package: 1:xorg-x11-font-utils-7.5-20.el7.x86_64 --> Processing Dependency: libXfont.so.1()(64bit) for package: 1:xorg-x11-font-utils-7.5-20.el7.x86_64 --> Running transaction check ---> Package libXau.x86_64 0:1.0.8-2.1.el7 will be installed ---> Package libXfont.x86_64 0:1.5.2-1.el7 will be installed ---> Package libfontenc.x86_64 0:1.1.3-3.el7 will be installed ---> Package libxslt.x86_64 0:1.1.28-5.el7 will be installed ---> Package python-javapackages.noarch 0:3.4.1-11.el7 will be installed --> Processing Dependency: python-lxml for package: python-javapackages-3.4.1-11.el7.noarch --> Running transaction check ---> Package python-lxml.x86_64 0:3.2.1-4.el7 will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: java-1.8.0-openjdk x86_64 1:1.8.0.191.b12-0.el7_5 updates 252 k Installing for dependencies: copy-jdk-configs noarch 3.3-10.el7_5 updates 21 k fontconfig x86_64 2.10.95-11.el7 base 229 k fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k giflib x86_64 4.1.6-9.el7 base 40 k java-1.8.0-openjdk-headless x86_64 1:1.8.0.191.b12-0.el7_5 updates 32 M javapackages-tools noarch 3.4.1-11.el7 base 73 k libICE x86_64 1.0.9-9.el7 base 66 k libSM x86_64 1.2.2-2.el7 base 39 k libX11 x86_64 1.6.5-1.el7 base 606 k libX11-common noarch 1.6.5-1.el7 base 164 k libXau x86_64 1.0.8-2.1.el7 base 29 k libXcomposite x86_64 0.4.4-4.1.el7 base 22 k libXext x86_64 1.3.3-3.el7 base 39 k libXfont x86_64 1.5.2-1.el7 base 152 k libXi x86_64 1.7.9-1.el7 base 40 k libXrender x86_64 0.9.10-1.el7 base 26 k libXtst x86_64 1.2.3-1.el7 base 20 k libfontenc x86_64 1.1.3-3.el7 base 31 k libjpeg-turbo x86_64 1.2.90-5.el7 base 134 k libpng x86_64 2:1.5.13-7.el7_2 base 213 k libxcb x86_64 1.12-1.el7 base 211 k libxslt x86_64 1.1.28-5.el7 base 242 k lksctp-tools x86_64 1.0.17-2.el7 base 88 k lyx-fonts noarch 2.2.3-1.el7 epel 159 k python-javapackages noarch 3.4.1-11.el7 base 31 k python-lxml x86_64 3.2.1-4.el7 base 758 k ttmkfdir x86_64 3.0.9-42.el7 base 48 k tzdata-java noarch 2018f-2.el7 updates 186 k xorg-x11-font-utils x86_64 1:7.5-20.el7 base 87 k xorg-x11-fonts-Type1 noarch 7.5-9.el7 base 521 k Transaction Summary ================================================================================ Install 1 Package (+30 Dependent packages) Total download size: 36 M Installed size: 116 M Is this ok [y/d/N]: y Downloading packages: (1/31): copy-jdk-configs-3.3-10.el7_5.noarch.rpm | 21 kB 00:00 (2/31): fontconfig-2.10.95-11.el7.x86_64.rpm | 229 kB 00:00 (3/31): fontpackages-filesystem-1.44-8.el7.noarch.rpm | 9.9 kB 00:00 (4/31): giflib-4.1.6-9.el7.x86_64.rpm | 40 kB 00:00 (5/31): javapackages-tools-3.4.1-11.el7.noarch.rpm | 73 kB 00:00 (6/31): libSM-1.2.2-2.el7.x86_64.rpm | 39 kB 00:00 (7/31): libX11-1.6.5-1.el7.x86_64.rpm | 606 kB 00:00 (8/31): java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64.rp | 252 kB 00:00 (9/31): libICE-1.0.9-9.el7.x86_64.rpm | 66 kB 00:00 (10/31): libX11-common-1.6.5-1.el7.noarch.rpm | 164 kB 00:00 (11/31): libXau-1.0.8-2.1.el7.x86_64.rpm | 29 kB 00:00 (12/31): libXcomposite-0.4.4-4.1.el7.x86_64.rpm | 22 kB 00:00 (13/31): libXext-1.3.3-3.el7.x86_64.rpm | 39 kB 00:00 (14/31): libXfont-1.5.2-1.el7.x86_64.rpm | 152 kB 00:00 (15/31): java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5 | 32 MB 00:01 (16/31): libXi-1.7.9-1.el7.x86_64.rpm | 40 kB 00:00 (17/31): libXrender-0.9.10-1.el7.x86_64.rpm | 26 kB 00:00 (18/31): libXtst-1.2.3-1.el7.x86_64.rpm | 20 kB 00:00 (19/31): libjpeg-turbo-1.2.90-5.el7.x86_64.rpm | 134 kB 00:00 (20/31): libpng-1.5.13-7.el7_2.x86_64.rpm | 213 kB 00:00 (21/31): libfontenc-1.1.3-3.el7.x86_64.rpm | 31 kB 00:00 (22/31): libxcb-1.12-1.el7.x86_64.rpm | 211 kB 00:00 (23/31): libxslt-1.1.28-5.el7.x86_64.rpm | 242 kB 00:00 (24/31): lksctp-tools-1.0.17-2.el7.x86_64.rpm | 88 kB 00:00 (25/31): python-javapackages-3.4.1-11.el7.noarch.rpm | 31 kB 00:00 (26/31): ttmkfdir-3.0.9-42.el7.x86_64.rpm | 48 kB 00:00 (27/31): python-lxml-3.2.1-4.el7.x86_64.rpm | 758 kB 00:00 (28/31): xorg-x11-font-utils-7.5-20.el7.x86_64.rpm | 87 kB 00:00 (29/31): lyx-fonts-2.2.3-1.el7.noarch.rpm | 159 kB 00:00 (30/31): tzdata-java-2018f-2.el7.noarch.rpm | 186 kB 00:00 (31/31): xorg-x11-fonts-Type1-7.5-9.el7.noarch.rpm | 521 kB 00:00 -------------------------------------------------------------------------------- Total 17 MB/s | 36 MB 00:02 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : libfontenc-1.1.3-3.el7.x86_64 1/31 Installing : libxslt-1.1.28-5.el7.x86_64 2/31 Installing : fontpackages-filesystem-1.44-8.el7.noarch 3/31 Installing : libjpeg-turbo-1.2.90-5.el7.x86_64 4/31 Installing : libICE-1.0.9-9.el7.x86_64 5/31 Installing : libSM-1.2.2-2.el7.x86_64 6/31 Installing : lyx-fonts-2.2.3-1.el7.noarch 7/31 Installing : fontconfig-2.10.95-11.el7.x86_64 8/31 Installing : python-lxml-3.2.1-4.el7.x86_64 9/31 Installing : python-javapackages-3.4.1-11.el7.noarch 10/31 Installing : javapackages-tools-3.4.1-11.el7.noarch 11/31 Installing : libXfont-1.5.2-1.el7.x86_64 12/31 Installing : 1:xorg-x11-font-utils-7.5-20.el7.x86_64 13/31 Installing : libXau-1.0.8-2.1.el7.x86_64 14/31 Installing : libxcb-1.12-1.el7.x86_64 15/31 Installing : libX11-common-1.6.5-1.el7.noarch 16/31 Installing : libX11-1.6.5-1.el7.x86_64 17/31 Installing : libXext-1.3.3-3.el7.x86_64 18/31 Installing : libXi-1.7.9-1.el7.x86_64 19/31 Installing : libXtst-1.2.3-1.el7.x86_64 20/31 Installing : giflib-4.1.6-9.el7.x86_64 21/31 Installing : libXrender-0.9.10-1.el7.x86_64 22/31 Installing : libXcomposite-0.4.4-4.1.el7.x86_64 23/31 Installing : lksctp-tools-1.0.17-2.el7.x86_64 24/31 Installing : tzdata-java-2018f-2.el7.noarch 25/31 Installing : copy-jdk-configs-3.3-10.el7_5.noarch 26/31 Installing : 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_ 27/31 Installing : ttmkfdir-3.0.9-42.el7.x86_64 28/31 Installing : xorg-x11-fonts-Type1-7.5-9.el7.noarch 29/31 Installing : 2:libpng-1.5.13-7.el7_2.x86_64 30/31 Installing : 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 31/31 Verifying : libXext-1.3.3-3.el7.x86_64 1/31 Verifying : libX11-1.6.5-1.el7.x86_64 2/31 Verifying : libXi-1.7.9-1.el7.x86_64 3/31 Verifying : libICE-1.0.9-9.el7.x86_64 4/31 Verifying : giflib-4.1.6-9.el7.x86_64 5/31 Verifying : libjpeg-turbo-1.2.90-5.el7.x86_64 6/31 Verifying : libXrender-0.9.10-1.el7.x86_64 7/31 Verifying : lyx-fonts-2.2.3-1.el7.noarch 8/31 Verifying : libXfont-1.5.2-1.el7.x86_64 9/31 Verifying : python-lxml-3.2.1-4.el7.x86_64 10/31 Verifying : 2:libpng-1.5.13-7.el7_2.x86_64 11/31 Verifying : fontpackages-filesystem-1.44-8.el7.noarch 12/31 Verifying : ttmkfdir-3.0.9-42.el7.x86_64 13/31 Verifying : 1:java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 14/31 Verifying : copy-jdk-configs-3.3-10.el7_5.noarch 15/31 Verifying : python-javapackages-3.4.1-11.el7.noarch 16/31 Verifying : 1:java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_ 17/31 Verifying : libXcomposite-0.4.4-4.1.el7.x86_64 18/31 Verifying : libXtst-1.2.3-1.el7.x86_64 19/31 Verifying : tzdata-java-2018f-2.el7.noarch 20/31 Verifying : lksctp-tools-1.0.17-2.el7.x86_64 21/31 Verifying : libxcb-1.12-1.el7.x86_64 22/31 Verifying : xorg-x11-fonts-Type1-7.5-9.el7.noarch 23/31 Verifying : libxslt-1.1.28-5.el7.x86_64 24/31 Verifying : javapackages-tools-3.4.1-11.el7.noarch 25/31 Verifying : libX11-common-1.6.5-1.el7.noarch 26/31 Verifying : libXau-1.0.8-2.1.el7.x86_64 27/31 Verifying : libSM-1.2.2-2.el7.x86_64 28/31 Verifying : fontconfig-2.10.95-11.el7.x86_64 29/31 Verifying : libfontenc-1.1.3-3.el7.x86_64 30/31 Verifying : 1:xorg-x11-font-utils-7.5-20.el7.x86_64 31/31 Installed: java-1.8.0-openjdk.x86_64 1:1.8.0.191.b12-0.el7_5 Dependency Installed: copy-jdk-configs.noarch 0:3.3-10.el7_5 fontconfig.x86_64 0:2.10.95-11.el7 fontpackages-filesystem.noarch 0:1.44-8.el7 giflib.x86_64 0:4.1.6-9.el7 java-1.8.0-openjdk-headless.x86_64 1:1.8.0.191.b12-0.el7_5 javapackages-tools.noarch 0:3.4.1-11.el7 libICE.x86_64 0:1.0.9-9.el7 libSM.x86_64 0:1.2.2-2.el7 libX11.x86_64 0:1.6.5-1.el7 libX11-common.noarch 0:1.6.5-1.el7 libXau.x86_64 0:1.0.8-2.1.el7 libXcomposite.x86_64 0:0.4.4-4.1.el7 libXext.x86_64 0:1.3.3-3.el7 libXfont.x86_64 0:1.5.2-1.el7 libXi.x86_64 0:1.7.9-1.el7 libXrender.x86_64 0:0.9.10-1.el7 libXtst.x86_64 0:1.2.3-1.el7 libfontenc.x86_64 0:1.1.3-3.el7 libjpeg-turbo.x86_64 0:1.2.90-5.el7 libpng.x86_64 2:1.5.13-7.el7_2 libxcb.x86_64 0:1.12-1.el7 libxslt.x86_64 0:1.1.28-5.el7 lksctp-tools.x86_64 0:1.0.17-2.el7 lyx-fonts.noarch 0:2.2.3-1.el7 python-javapackages.noarch 0:3.4.1-11.el7 python-lxml.x86_64 0:3.2.1-4.el7 ttmkfdir.x86_64 0:3.0.9-42.el7 tzdata-java.noarch 0:2018f-2.el7 xorg-x11-font-utils.x86_64 1:7.5-20.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 Complete!
Ob das Installieren der Java Runtime Environment (Java-Laufzeitumgebung) wirklich erfolgreich durchgeführt wurde, kann mit nachfolgendem Befehl getestet werden:
# java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
JDK (Quellen)
Falls der FooterMilter aus den (Quellen) übersetzt werden soll wird zusätzlich zur der Java Runtime Environment (Java-Laufzeitumgebung), auch die Java Development Kit (Java-Entwicklerwerkzeuge) benötigt.
# yum install java-1.8.0-openjdk-devel
Ob das Installieren der Java Development Kit (Java-Entwicklerwerkzeuge) ebenfalls wirklich erfolgreich durchgeführt wurde, kann mit nachfolgendem Befehl getestet werden:
# javac -version javac 1.8.0_191
Installation: FooterMilter.jar (Fertige JAR-Datei)
Herunterladen Paket-Datei
Bevor die Ausführung der ausführbaren Java - FooterMilter.jar
-Archivdatei gestartet werden kann, muss das fertige Paket mit nachfolgendem Befehl heruntergeladen werden:
# wget -P /tmp https://github.com/tachtler/FooterMilter/archive/master.zip --2024-05-01 08:25:06-- https://github.com/tachtler/FooterMilter/archive/master.zip Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' Resolving github.com (github.com)... 140.82.121.4 Connecting to github.com (github.com)|140.82.121.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master [following] --2024-05-01 08:25:06-- https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master Resolving codeload.github.com (codeload.github.com)... 140.82.121.9 Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘/tmp/master.zip’ master.zip [ <=> ] 6.29M 11.3MB/s in 0.6s 2024-05-01 08:25:07 (11.3 MB/s) - ‘/tmp/master.zip’ saved [6598602]
Entpacken Paket-Datei
Dazu wird mit nachfolgendem Befehl in das Verzeichnis /tmp/
gewechselt:
# cd /tmp/
Anschließend kann nun mit nachfolgendem Befehl die zuvor heruntergeladene Datei /tmp/master.zip
entpackt werden:
# unzip /tmp/master.zip Archive: /tmp/master.zip 3f3a6b36eff59a749460651640677036e69c1eef creating: FooterMilter-master/ inflating: FooterMilter-master/FooterMilter.jar inflating: FooterMilter-master/LICENSE creating: FooterMilter-master/META-INF/ inflating: FooterMilter-master/META-INF/MANIFEST.MF inflating: FooterMilter-master/README.md creating: FooterMilter-master/doc/ inflating: FooterMilter-master/doc/FooterMilter.adoc inflating: FooterMilter-master/doc/FooterMilter.html inflating: FooterMilter-master/doc/FooterMilter.jar.1 inflating: FooterMilter-master/footermilter.ini inflating: FooterMilter-master/footermilter.service creating: FooterMilter-master/lib/ inflating: FooterMilter-master/lib/apache-mime4j-core-0.8.11.jar inflating: FooterMilter-master/lib/apache-mime4j-dom-0.8.11.jar inflating: FooterMilter-master/lib/apache-mime4j-storage-0.8.11.jar inflating: FooterMilter-master/lib/commons-cli-1.6.0.jar inflating: FooterMilter-master/lib/commons-codec-1.16.1.jar inflating: FooterMilter-master/lib/commons-io-2.16.1.jar inflating: FooterMilter-master/lib/commons-lang3-3.14.0.jar inflating: FooterMilter-master/lib/commons-logging-1.3.1.jar inflating: FooterMilter-master/lib/ini4j-0.5.4.jar inflating: FooterMilter-master/lib/javax.inject.jar inflating: FooterMilter-master/lib/jmilter-0.6.jar inflating: FooterMilter-master/lib/jsr305-3.0.2.jar inflating: FooterMilter-master/lib/log4j-api-2.23.1.jar inflating: FooterMilter-master/lib/log4j-core-2.23.1.jar inflating: FooterMilter-master/lib/netty-buffer-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-codec-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-common-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-handler-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-resolver-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-classes-epoll-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-native-epoll-4.1.109.Final-linux-x86_64.jar inflating: FooterMilter-master/lib/netty-transport-native-unix-common-4.1.109.Final.jar inflating: FooterMilter-master/log4j2.xml creating: FooterMilter-master/net/ creating: FooterMilter-master/net/tachtler/ creating: FooterMilter-master/net/tachtler/jmilter/ creating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/ inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilter.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterCLIArgsParser.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterException.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterHandler.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterUtilities.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/package-info.java
wodurch die folgende Verzeichnisstruktur entsteht, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -l /tmp/FooterMilter-master/ total 84 drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 doc -rw-r--r-- 1 klaus klaus 5027 May 1 08:02 footermilter.ini -rw-r--r-- 1 klaus klaus 20199 May 1 08:02 FooterMilter.jar -rw-r--r-- 1 klaus klaus 310 May 1 08:02 footermilter.service drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 lib -rw-r--r-- 1 klaus klaus 11357 May 1 08:02 LICENSE -rw-r--r-- 1 klaus klaus 1676 May 1 08:02 log4j2.xml drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 META-INF drwxr-xr-x 3 klaus klaus 4096 May 1 08:02 net -rw-r--r-- 1 klaus klaus 20280 May 1 08:02 README.md
Löschen der nicht benötigten Quelldateien
Die nicht benötigten Quelldateien unter
/tmp/FooterMilter-master/net
/tmp/FooterMilter-master/META-INF
und unterhalb dieser Verzeichnisse, können mit nachfolgendem Befehl gelöscht werden:
# rm -rf /tmp/FooterMilter-master/{META-INF,net}
Test von FooterMilter.jar
Ob die heruntergeladene Java - FooterMilter.jar
-Archivdatei ausführbar ist, kann mit nachfolgendem Befehl getestet werden und sollte eine Ausgabe wie die nachfolgende erzeugen:
# java -jar /tmp/FooterMilter-master/FooterMilter.jar -h usage: /path/to/java -jar /path/to/FooterMilter.jar [-c <path and name of the config file>] [-h] [-v] [-d] FooterMilter for Sendmail or Postfix to insert a footer at the end of the body. -c,--config <arg> [REQUIRED] Path and name of the config file -d,--debug DEBUG mode with runtime output -h,--help Print this usage information -v,--version Version of the program Copyright (c) 2024 Klaus Tachtler, <klaus@tachtler.net>. All Rights Reserved. Version 1.2.
WICHTIG - Die
FooterMilter.jar
-Archivdatei kann NUR ausgeführt werden, wenn auch die weiteren Dateien in der nachfolgend dargestellten Verzeichnisstruktur vorhanden sind, insbesondere das Verzeichnis lib
und dessen Inhalt !!!
# ls -l /tmp/FooterMilter-master/ total 76 drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 doc -rw-r--r-- 1 klaus klaus 5027 May 1 08:02 footermilter.ini -rw-r--r-- 1 klaus klaus 20199 May 1 08:02 FooterMilter.jar -rw-r--r-- 1 klaus klaus 310 May 1 08:02 footermilter.service drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 lib -rw-r--r-- 1 klaus klaus 11357 May 1 08:02 LICENSE -rw-r--r-- 1 klaus klaus 1676 May 1 08:02 log4j2.xml -rw-r--r-- 1 klaus klaus 20280 May 1 08:02 README.md
HINWEIS - Das Verzeichnis
/tmp/FooterMilter-master/
kann selbstverständlich
- umbenannt oder auch
- verschoben werden
solange die Verzeichnisstruktur innerhalb, in dem die FooterMilter.jar
-Archivdatei liegt, komplett erhalten bleibt !!!
Installation: FooterMilter.jar (Quellen)
Herunterladen des Quellcodes
Bevor mit der Umwandlung des Java - Quellcodes und Erstellung der ausführbaren Java - FooterMilter.jar
-Archivdatei begonnen werden kann, müssen die Quellen unter nachfolgendem externen Link heruntergeladen werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# wget -P /tmp https://github.com/tachtler/FooterMilter/archive/master.zip --2024-05-01 08:28:23-- https://github.com/tachtler/FooterMilter/archive/master.zip Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' Resolving github.com (github.com)... 140.82.121.3 Connecting to github.com (github.com)|140.82.121.3|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master [following] --2024-05-01 08:28:24-- https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master Resolving codeload.github.com (codeload.github.com)... 140.82.121.9 Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘/tmp/master.zip’ master.zip [ <=> ] 6.29M 10.7MB/s in 0.6s 2024-05-01 08:28:24 (10.7 MB/s) - ‘/tmp/master.zip’ saved [6598602]
Entpacken des Quellencodes
Dazu wird mit nachfolgendem Befehl in das Verzeichnis /tmp/
gewechselt:
# cd /tmp/
Anschließend kann nun mit nachfolgendem Befehl die zuvor heruntergeladene Datei /tmp/master.zip
entpackt werden:
# unzip /tmp/master.zip Archive: /tmp/master.zip 3f3a6b36eff59a749460651640677036e69c1eef creating: FooterMilter-master/ inflating: FooterMilter-master/FooterMilter.jar inflating: FooterMilter-master/LICENSE creating: FooterMilter-master/META-INF/ inflating: FooterMilter-master/META-INF/MANIFEST.MF inflating: FooterMilter-master/README.md creating: FooterMilter-master/doc/ inflating: FooterMilter-master/doc/FooterMilter.adoc inflating: FooterMilter-master/doc/FooterMilter.html inflating: FooterMilter-master/doc/FooterMilter.jar.1 inflating: FooterMilter-master/footermilter.ini inflating: FooterMilter-master/footermilter.service creating: FooterMilter-master/lib/ inflating: FooterMilter-master/lib/apache-mime4j-core-0.8.11.jar inflating: FooterMilter-master/lib/apache-mime4j-dom-0.8.11.jar inflating: FooterMilter-master/lib/apache-mime4j-storage-0.8.11.jar inflating: FooterMilter-master/lib/commons-cli-1.6.0.jar inflating: FooterMilter-master/lib/commons-codec-1.16.1.jar inflating: FooterMilter-master/lib/commons-io-2.16.1.jar inflating: FooterMilter-master/lib/commons-lang3-3.14.0.jar inflating: FooterMilter-master/lib/commons-logging-1.3.1.jar inflating: FooterMilter-master/lib/ini4j-0.5.4.jar inflating: FooterMilter-master/lib/javax.inject.jar inflating: FooterMilter-master/lib/jmilter-0.6.jar inflating: FooterMilter-master/lib/jsr305-3.0.2.jar inflating: FooterMilter-master/lib/log4j-api-2.23.1.jar inflating: FooterMilter-master/lib/log4j-core-2.23.1.jar inflating: FooterMilter-master/lib/netty-buffer-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-codec-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-common-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-handler-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-resolver-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-classes-epoll-4.1.109.Final.jar inflating: FooterMilter-master/lib/netty-transport-native-epoll-4.1.109.Final-linux-x86_64.jar inflating: FooterMilter-master/lib/netty-transport-native-unix-common-4.1.109.Final.jar inflating: FooterMilter-master/log4j2.xml creating: FooterMilter-master/net/ creating: FooterMilter-master/net/tachtler/ creating: FooterMilter-master/net/tachtler/jmilter/ creating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/ inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilter.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterCLIArgsParser.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterException.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterHandler.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterUtilities.java inflating: FooterMilter-master/net/tachtler/jmilter/FooterMilter/package-info.java
wodurch die folgende Verzeichnisstruktur entsteht, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -l /tmp/FooterMilter-master/ total 84 drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 doc -rw-r--r-- 1 klaus klaus 5027 May 1 08:02 footermilter.ini -rw-r--r-- 1 klaus klaus 20199 May 1 08:02 FooterMilter.jar -rw-r--r-- 1 klaus klaus 310 May 1 08:02 footermilter.service drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 lib -rw-r--r-- 1 klaus klaus 11357 May 1 08:02 LICENSE -rw-r--r-- 1 klaus klaus 1676 May 1 08:02 log4j2.xml drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 META-INF drwxr-xr-x 3 klaus klaus 4096 May 1 08:02 net -rw-r--r-- 1 klaus klaus 20280 May 1 08:02 README.md
Umwandeln der *.java-Dateien
Dazu wird mit nachfolgendem Befehl in das Verzeichnis /tmp/FooterMilter-master/
gewechselt:
# cd /tmp/FooterMilter-master/
HINWEIS - Die bereits enthaltene und mit heruntergeladene Java -
FooterMilter.jar
-Archivdatei, kann mit nachfolgendem Befehl gelöscht werden:
# rm -f /tmp/FooterMilter-master/FooterMilter.jar
Damit nun aus dem Quellcode mit der
- Dateiendung
.java
nun der sogenannte Byte-Code mit der
- Dateiendung
.class
von Java wird, ist nachfolgender Befehl auszuführen:
# javac -g:none -target 1.8 -cp ./lib/*:* /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/*.java
HINWEIS - KEINE Ausgabe bedeutet auch KEINE Fehler!
Ob die Umwandlung des Quellcodes mit der Dateiendung .java
in den sogenannte Byte-Code mit der Dateiendung .class
von Java erfolgreich durchgeführt wurde, kann nachfolgender Befehl die so neu erstellten .class
-Dateien auflisten:
# find /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/ -name *.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterHandler.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterException.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterCLIArgsParser.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilter.class /tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterUtilities.class
Erzeugen des FooterMilter.jar
Nachfolgender Befehl erstellt nun die ausführbare Java - FooterMilter.jar
-Archivdatei:
# jar cvfm FooterMilter.jar META-INF/MANIFEST.MF net/tachtler/jmilter/FooterMilter/*.class added manifest adding: net/tachtler/jmilter/FooterMilter/FooterMilter.class(in = 3087) (out= 1335)(deflated 56%) adding: net/tachtler/jmilter/FooterMilter/FooterMilterCLIArgsParser.class(in = 9565) (out= 4097)(deflated 57%) adding: net/tachtler/jmilter/FooterMilter/FooterMilterException.class(in = 2189) (out= 903)(deflated 58%) adding: net/tachtler/jmilter/FooterMilter/FooterMilterHandler.class(in = 28880) (out= 9138)(deflated 68%) adding: net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.class(in = 1821) (out= 752)(deflated 58%) adding: net/tachtler/jmilter/FooterMilter/FooterMilterUtilities.class(in = 5041) (out= 2056)(deflated 59%)
WICHTIG - Bitte nur vorsichtig Veränderungen an der Konfigurationsdatei
META-INF/MANIFEST.MF
durchführen !!!
Der Aufbau der Konfigurationsdatei META-INF/MANIFEST.MF
muss entsprechend genau so bleiben - WICHTIG
ist hierbei, das bei jeder Zeile in der eine
lib
(Bibliothek im JAR-Format) (JavaArchive) am Anfang und Ende ein [LEERZEICHEN] vorhanden ist.
Ausnahme ist hier NUR die erste Zeile: Manifest-Version: 1.0
Die Zeilen:
Class-Path: .
Main-Class: net.tachtler.jmilter.FooterMilter.FooterMilter
müssen NUR am Ende der jeweiligen Zeile ein [LEERZEICHEN] enthalten !
* _
= Leerezeichen, $
= Zeilenende
Ausführung FooterMilter.jar
Ob die soeben erzeugte Java - FooterMilter.jar
-Archivdatei auch ausführbar ist, kann mit nachfolgendem Befehl getestet werden und sollte eine Ausgabe wie die nachfolgende erzeugen:
# java -jar FooterMilter.jar -h usage: /path/to/java -jar /path/to/FooterMilter.jar [-c <path and name of the config file>] [-h] [-v] [-d] FooterMilter for Sendmail or Postfix to insert a footer at the end of the body. -c,--config <arg> [REQUIRED] Path and name of the config file -d,--debug DEBUG mode with runtime output -h,--help Print this usage information -v,--version Version of the program Copyright (c) 2024 Klaus Tachtler, <klaus@tachtler.net>. All Rights Reserved. Version 1.2.
WICHTIG - Die
FooterMilter.jar
-Archivdatei kann NUR ausgeführt werden, wenn auch die weiteren Dateien in der nachfolgend dargestellten Verzeichnisstruktur vorhanden sind, insbesondere das Verzeichnis lib
und dessen Inhalt !!!
# ls -l /tmp/FooterMilter-master/ total 84 drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 doc -rw-r--r-- 1 klaus klaus 5027 May 1 08:02 footermilter.ini -rw-r--r-- 1 klaus klaus 20199 May 1 08:30 FooterMilter.jar -rw-r--r-- 1 klaus klaus 310 May 1 08:02 footermilter.service drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 lib -rw-r--r-- 1 klaus klaus 11357 May 1 08:02 LICENSE -rw-r--r-- 1 klaus klaus 1676 May 1 08:02 log4j2.xml drwxr-xr-x 2 klaus klaus 4096 May 1 08:02 META-INF drwxr-xr-x 3 klaus klaus 4096 May 1 08:02 net -rw-r--r-- 1 klaus klaus 20280 May 1 08:02 README.md
HINWEIS - Das Verzeichnis
/tmp/FooterMilter-master/
kann selbstverständlich
- umbenannt oder auch
- verschoben werden
solange die Verzeichnisstruktur innerhalb, in dem die FooterMilter.jar
-Archivdatei liegt, komplett erhalten bleibt !!!
Konfiguration: FooterMilter
Nachdem nun der FooterMilter lauffähig zur Verfügung stehen sollte, kann mit der Konfiguration begonnen werden.
Zielverzeichnis: /opt
Zur Dateisystemhygiene sollte das komplette Verzeichnis in dem der FooterMilter ausgeführt wird, aus dem /tmp
-Verzeichnis in einen zur dauerhaften Speicherung besser geeigneten Ort, hier: /opt
kopiert werden und dabei soll auch gleichzeitig der Name angepasst werden, was mit nachfolgendem Befehl durchgeführt werden kann:
WICHTIG -
- Falls ein anderes Zielverzeichnis als
/opt
verwendet werden soll, - oder der Verzeichnisname nicht FooterMilter genannt werden soll,
muss die Datei
footermilter.service
ebenfalls angepasst werden !!!
# mv /tmp/FooterMilter-master /opt/FooterMilter
footermilter.service: Dienst/Deamon-Start einrichten
Bevor mit der inhaltlichen Konfiguration begonnen werden soll, kann mit Hilfe des im Paket enthaltenen Start/Stopp/Restart-Skripts mit der Bezeichnung
footermilter.service
der automatische Start/Stopp/Restart des FooterMilter unter Systemd
eingerichtet werden.
Dazu muss zuerst des Start/Stopp/Restart-Skripts mit nachfolgendem Befehl in das Verzeichnis
/usr/lib/systemd/system
verschoben werden:
# mv /opt/FooterMilter/footermilter.service /usr/lib/systemd/system/footermilter.service
Anschliessend muss nachfolgender Befehl dazu verwendet werden dem systemd
das neue Skript bekannt zu geben:
# systemctl daemon-reload
Um FooterMilter, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable footermilter.service Created symlink from /etc/systemd/system/multi-user.target.wants/footermilter.service to /usr/lib/systemd/system/footermilter.service.
Eine Überprüfung, ob beim Neustart des Server der footermilter.service
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e footermilter.service footermilter.service enabled
bzw.
# systemctl is-enabled footermilter.service enabled
log4j2.xml - Log-Verzeichnis: /var/log/FooterMilter
Der Inhalt der Konfigurationsdatei /opt/FooterMilter/log4j2.xml
bestimmt, in welches Verzeichnis ggf. LOG-Daten geschrieben werden sollen.
Standardmässig werden die Log-Daten nach: /var/log/FooterMilter
geschrieben.
Diese und weitere Einstellungen können in dieser Datei zum Thema Logging vorgenommen werden. Siehe auch den externen Link:
Nachfolgend die komplette standard log4j2.xml
-Konfigurationsdatei, welche mit nachfolgendem Befehl zu Anzeige gebracht werden kann:
# cat log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <Property name="baseDir">/var/log/FooterMilter</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{DEFAULT} [%-5p] [%-40C{1}] [%-40M] %m%n" /> </Console> <RollingFile name="RollingFile" fileName="${baseDir}/FooterMilter.log" filePattern="${baseDir}/$${date:yyyy-MM}/FooterMilter-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{DEFAULT} [%-5p] [%-40C{1}] [%-40M] %m%n" /> <Policies> <OnStartupTriggeringPolicy /> <TimeBasedTriggeringPolicy /> <CronTriggeringPolicy schedule="0 0 * * * ?" /> </Policies> <DefaultRolloverStrategy> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/FooterMilter-*.log.gz" /> <IfLastModified age="31d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile" /> </Root> </Loggers> </Configuration>
Hauptkonfigurationsdatei: footermilter.ini
WICHTIG - Die Konfigurationsdatei liegt standardmässig unter
/opt/FooterMilter/footermilter.ini
WICHTIG -
- Falls ein anderes Verzeichnis als
/opt/FooterMilter/footermilter.ini
verwendet werden soll, - oder der Datei- oder Verzeichnisname abgeändert werden soll,
muss die Datei
footermilter.service
ebenfalls angepasst werden !!!
Die Hauptkonfigurationsdatei des FooterMilter - footermilter.ini
beinhaltet alle Einstellungen für
- den Start und dessen Startparameter - Sektion
[server]
- die Konfiguration der anzuwendenden Footer - Sektion
[footer]
Sektion: [service]
Nachfolgende Parameter können in der Sektion [server]
gesetzt werden:
Parameter | Standardwert | Beschreibung |
---|---|---|
listen | 127.0.0.1 | IPv4-Adresse oder Hostname auf den der Dienst/Daemon erreichbar sein soll |
port | 10099 | Port auf dem der Dienst/Daemon erreichbar sein soll |
HINWEIS - Falls zu Zwecken der Fehlersuche ein DEBUG Logging gewünscht ist, ist dies mit dem Parameter
-d
im Start-Skript oder bei einem manuellen Start zu erreichen.
Sektion: [footer]
In der/den [footer]
Sektion(en) sind Mehrfachkonfigurationen möglich und erwünscht, nachfolgend ist jedoch nachfolgendes zu beachten:
- Jede Sektion
[footer]
muss mit dem Wort:footer
beginnen. - Jede Sektion
[footer]
muss eine eindeutig Bezeichnung haben.
Beispiele:
[footer: default]
[footer: localpart@domain.tld]
[footer: 001]
[footer-default]
[footer]
Nachfolgende Parameter können in der/den Sektion(en) [footer]
gesetzt werden:
Parameter | Standardwert | Beschreibung |
---|---|---|
enabled | true | Soll diese [footer] -Sektion aktiv sein |
from | user@example.com oder @example.com | E-Mail-Adresse oder Domäne mit vorangestelltem \'@\'-Zeichen |
text | – | Footer für den Content-Type - text/plain |
html | – | Footer für den Content-Type - text/html |
Nachfolgende Besonderheit gibt es beim
- Parameter:
from
Falls hier @Domain.tld
anstelle einer vollständigen E-Mail-Adresse angegeben wird, wird dieser Footer angehängt, falls keine E-Mail-Adresse auf weitere Footer zutrifft.
HINWEIS -
@Domain.tld
ist der Standard-Footer für diese Domäne!
Beispiele:
user@example.com
- E-Mail-Adresse@example.com
- Standard für diese Domäne, falls keine E-Mail-Adresse trifft.@sub.example.com
- Standard für diese Unter-Domäne, falls keine E-Mail-Adresse trifft.
Nachfolgende Besonderheit gibt es bei dem
- Parameter:
text
und - Parameter:
html
Zu besseren Lesbarkeit bei der Konfiguration der Parameter text
und html
kann z.B. jeweils ein
- \ (backslash)
am Ende einer Zeile angebracht werden.
Darüber hinaus können nachfolgende weitere „Escape“ Sequenzen genutzt werden, um die Lesbarkeit bei der Konfiguration des jeweiligen Footer zu erhöhen.
Escape sequence | Beschreibung |
---|---|
\t | Fügen an dieser Stelle einen Tabulator in den Text ein. |
\b | Fügen an dieser Stelle einen „Backspace“ in den Text ein. |
\n | IFügen an dieser Stelle eine neue Zeile in den Text ein. |
\r | Fügen an dieser Stelle einen Wagenrücklaufcode in den Text ein. |
\f | Fügen an dieser Stelle einen Formfeed in den Text ein. |
\ ' | Fügen an dieser Stelle ein einfaches Anführungszeichen in den Text ein. |
\„ | Fügen an dieser Stelle ein doppeltes Anführungszeichen in den Text ein. |
\\ | Fügen an dieser Stelle ein „Backslash“-Zeichen in den Text ein. |
Beispiele:
text/plain
-- \ \n\ \n\ --------------------------------------------\n\ Footer default\n\ --------------------------------------------\n\ \n
text/html
<br\>\n\ <br\>\n\ <span style=\"font-family:monospace; color:#000000\">-- </span><br>\n\ <br\>\n\ <span style=\"font-family:monospace; color:#000000\">Footer default</span><br>\n\ <br\>\n\n
Abschliessend als Beispiel eine komplette Konfigurationsdatei:
################################################################################ # JMilter Server for connections from an MTA to add a footer. # # JMilter is an Open Source implementation of the Sendmail milter protocol, for # implementing milters in Java that can interface with the Sendmail or Postfix # MTA. # # Java implementation of the Sendmail Milter protocol based on the project of # org.nightcode.jmilter from dmitry@nightcode.org. # # @author Klaus Tachtler. <klaus@tachtler.net> # # Homepage : http://www.tachtler.net # # Licensed under the Apache License, Version 2.0 (the "License"); you # may not use this file except in compliance with the License. You may # obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License.. # # Copyright (c) 2022 Klaus Tachtler. All Rights Reserved. # Klaus Tachtler. <klaus@tachtler.net> # http://www.tachtler.net # ################################################################################ ################################################################################ # [server] section - Start configuration for the server. ################################################################################ [server] # IPv4 address or hostname to listen. listen = 127.0.0.1 # Port to listen. port = 10099 ################################################################################ # [footer] section - Configuration of the footers to be used. ################################################################################ # # !IMPORTANT: Every section # a.) must start with the word: footer # b.) must have an unique name # # EXAMPLES: [footer: default], [footer: localpart@domain.tld], [footer: 001] # # ============================================================================== # # from field: If inside a [footer]-section the from field was defined with the # following syntax: @domain.tld -> NO localpart! <- # this will be used as DEFAULT for the domain, if no email address # will match! # # EXAMPLE: from = @example.com # # ============================================================================== # # text/html : For a better configuration view for the text and html fields, it's # possible to use a single \ (backslash) at the end of the line! # # EXAMPLE: text = -- \ # first word \ # second word \ # last word. # # SAME AS: text = -- first word second word last word. # # ============================================================================== # # escape's : Some escape sequences can be used, for more well formatted output! # Escape sequences description: # # \t Insert a tab in the text at this point. # \b Insert a backspace in the text at this point. # \n Insert a newline in the text at this point. # \r Insert a carriage return in the text at this point. # \f Insert a formfeed in the text at this point. # \' Insert a single quote character in the text at this point. # \" Insert a double quote character in the text at this point. # \\ Insert a backslash character in the text at this point. # ################################################################################ [footer: @example.com] # Enable this footer. enabled = true # Email "mail from:" for generating the footer. from = @example.com # Footer for text/plain. text = -- \ \n\ \n\ --------------------------------------------\n\ Footer default\n\ --------------------------------------------\n\ \n # Footer for text/html. html = <br\>\n\ <br\>\n\ <span style=\"font-family:monospace; color:#000000\">-- </span><br>\n\ <br\>\n\ <span style=\"font-family:monospace; color:#000000\">Footer default</span><br>\n\ <br\>\n\n ################################################################################ [footer: user@example.com] # Enable this footer. enabled = true # Email "mail from:" for generating the footer. from = user@example.com # Footer for text/plain. text = -- \n\n--------------------------------------------\nFooter user\n--------------------------------------------\n\n # Footer for text/html. html = <br\>\n<br\>\n<span style=\"font-family:monospace; color:#000000\">-- </span><br>\n<br\>\n<span style=\"font-family:monospace; color:#000000\">Footer user</span><br>\n<br\>\n\n ################################################################################
footerMilter: Erster Start
Der FooterMilter-Dienst/Daemon kann mit nachfolgendem Befehle gestartet werden:
# systemctl start footermilter.service
Mit nachfolgendem Befehl kann der Status des FooterMilter-Dienst/Daemon abgefragt werden:
# systemctl status footermilter.service ● footermilter.service - FooterMilter Java Service Loaded: loaded (/usr/lib/systemd/system/footermilter.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-04-21 19:46:28 CEST; 55min ago Main PID: 4198 (java) CGroup: /system.slice/footermilter.service └─4198 /usr/bin/java -jar FooterMilter.jar -c footermilter.ini Apr 21 19:46:28 server70.idmz.tachtler.net systemd[1]: Stopped FooterMilter J... Apr 21 19:46:28 server70.idmz.tachtler.net systemd[1]: Started FooterMilter J... Apr 21 19:46:30 server70.idmz.tachtler.net java[4198]: Apr 21, 2022 7:46:30 P... Apr 21 19:46:30 server70.idmz.tachtler.net java[4198]: INFO: [MilterGatewayMa... Hint: Some lines were ellipsized, use -l to show in full.
Nachfolgende Abfrage zeigt, auf welcher IPv4-Adresse und Port der lauscht:
# netstat -tulpen | grep java tcp 0 0 192.168.0.70:10099 0.0.0.0:* LISTEN 0 56485375 12118/java
* Konfiguriert wurde hier das Lauschen auf der IPv4-Adresse 192.168.0.70
und Port 10099
Konfiguration: Postfix
Nachfolgende Konfigurationen müssen mindestens durchgeführt werden, um aus Postfix heraus den FooterMilter-Dienst/Daemon ansprechen zu können.
WICHTIG - Bitte immer VOR z.B. DKIM einbinden, da sonst die SIGNATUR kaputt geht!
/etc/postfix/main.cf
Nachfolgende Änderung muss an der Postfix-Konfigurationsdatei
/etc/postfix/main.cf
durchgeführt werden:
(Nur relevanter Ausschnitt):
# -------------------------------------------------------------------------------- # New - http://www.postfix.org/MILTER_README.html # MILTER CONFIGURATIONS # -------------------------------------------------------------------------------- # FooterMilter (footer_milter) footer_milter = inet:192.168.0.70:10099
/etc/postfix/master.cf
Nachfolgende Änderung muss an der Postfix-Konfigurationsdatei
/etc/postfix/master.cf
durchgeführt werden:
(Nur relevanter Ausschnitt):
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # Do not forget to execute "postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd # FooterMilter -o smtpd_milters=${footer_milter}
Ergebnisse
Nachfolgende Ergebnisse verdeutlichen, wie die Veränderungen jeweils durchgeführt werden.
E-Mail: multipart (text/plain & text/html)
Nachfolgend die E-Mail im Editor vor dem Absenden, hier z.B. Mozilla Thunderbird:
und der dazugehörige Quelltext der empfangenen E-Mail (Nur header
und body
der E-Mail):
To: klaus@example.com From: "Klaus Tachtler (127.0.0.1)" <klaus@example.com> Subject: Test email - multipart (text/plain and test/html) Message-ID: <719f9aff-e1f5-5b2e-dea9-113b201b3783@example.com> Date: Sat, 1 Dec 2018 09:28:08 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="------------6CC6B6965C0013F5ACCB0379" Content-Language: en-US X-FooterMilter-Modified: Mail body modified (using footer) by mx.example.com for <klaus@example.com> This is a multi-part message in MIME format. --------------6CC6B6965C0013F5ACCB0379 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hello, this is a test email. Greetings Klaus. -- -------------------------------------------- Footer user -------------------------------------------- --------------6CC6B6965C0013F5ACCB0379 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body text="#000000" bgcolor="#FFFFFF"> <p>Hello,</p> <p>this is a <font color="#009900">test email</font>.</p> <p>Greetings<br> Klaus.<br> </p> <br> <br <span style="font-family:monospace; color:#000000">-- </span><br> <br> <span style="font-family:monospace; color:#000000">Footer user</span><br> <br> </body> </html> --------------6CC6B6965C0013F5ACCB0379--
Und das anschließende Ergebnis beim Empfänger der E-Mail:
E-Mail: text/plain
Nachfolgend die E-Mail im Editor vor dem Absenden, hier z.B. Mozilla Thunderbird:
und der dazugehörige Quelltext der empfangenen E-Mail (Nur header
und body
der E-Mail):
To: klaus@example.com From: "Klaus Tachtler (127.0.0.1)" <klaus@example.com> Subject: Test email - text (text/plain) Message-ID: <df683f65-3acb-e7fc-9dea-f948a612f526@example.com> Date: Sat, 1 Dec 2018 09:33:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-FooterMilter-Modified: Mail body modified (using footer) by mx.example.com for <klaus@example.com> Hello, this is a test email. Greetings Klaus. -- -------------------------------------------- Footer user --------------------------------------------
Und das anschließende Ergebnis beim Empfänger der E-Mail:
E-Mail: text/html
Nachfolgend die E-Mail im Editor vor dem Absenden, hier z.B. Mozilla Thunderbird:
und der dazugehörige Quelltext der empfangenen E-Mail (Nur header
und body
der E-Mail):
To: klaus@example.com From: "Klaus Tachtler (127.0.0.1)" <klaus@example.com> Subject: Test email - text (text/html) Message-ID: <44895c01-179a-2f83-99ca-2945e5358812@example.com> Date: Sat, 1 Dec 2018 09:37:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-FooterMilter-Modified: Mail body modified (using footer) by mx.example.com for <klaus@example.com> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body text="#000000" bgcolor="#FFFFFF"> <p>Hello, <br> <br> this is a <font color="#009900">test email</font>. <br> <br> Greetings <br> Klaus. </p> <br> <br> <span style="font-family:monospace; color:#000000">-- </span><br> <br> <span style="font-family:monospace; color:#000000">Footer user</span><br> <br> </body> </html>
Und das anschließende Ergebnis beim Empfänger der E-Mail: