Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_centos_7_-_footermilter_einsetzen_footermilter

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

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:

:!: WICHTIG - Nachfolgende Abhängigkeiten zu anderen Java-Archivdateien sind in dem zu herunterladendem

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.

  1. Herunterladen der bereits vorhandenen ausführbaren Java - FooterMilter.jar-Archivdatei und deren Abhängigkeiten als Paket.
  2. 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:

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:

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
--2022-04-21 20:36:28--  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]
--2022-04-21 20:36:29--  https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 140.82.121.10
Connecting to codeload.github.com (codeload.github.com)|140.82.121.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘/tmp/master.zip’

master.zip                        [                 <=>                            ]  11.28M  3.43MB/s    in 3.4s    

2022-04-21 20:36:33 (3.32 MB/s) - ‘/tmp/master.zip’ saved [11828710]

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:  master.zip
1cc1df4d0a3dbf38324c1acf425bd13d7912bb09
   creating: FooterMilter-master/
 extracting: 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.2.jar  
  inflating: FooterMilter-master/lib/apache-mime4j-dom-0.8.2.jar  
  inflating: FooterMilter-master/lib/apache-mime4j-storage-0.8.2.jar  
  inflating: FooterMilter-master/lib/commons-cli-1.5.0.jar  
  inflating: FooterMilter-master/lib/commons-codec-1.15.jar  
  inflating: FooterMilter-master/lib/commons-io-2.11.0.jar  
  inflating: FooterMilter-master/lib/commons-lang3-3.12.0.jar  
  inflating: FooterMilter-master/lib/commons-logging-1.2.jar  
  inflating: FooterMilter-master/lib/ini4j-0.5.4.jar  
  inflating: FooterMilter-master/lib/javax.inject.jar  
  inflating: FooterMilter-master/lib/jmilter-0.3.6.jar  
  inflating: FooterMilter-master/lib/jsr305-3.0.2.jar  
  inflating: FooterMilter-master/lib/log4j-api-2.17.2.jar  
  inflating: FooterMilter-master/lib/log4j-core-2.17.2.jar  
  inflating: FooterMilter-master/lib/netty-buffer-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-codec-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-common-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-handler-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-transport-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/yaranga-0.11.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 5812
drwxr-xr-x 2 root root      82 Apr 21 19:25 doc
-rw-r--r-- 1 root root    5028 Apr 21 19:25 footermilter.ini
-rw-r--r-- 1 root root 5897131 Apr 21 19:25 FooterMilter.jar
-rw-r--r-- 1 root root     311 Apr 21 19:25 footermilter.service
drwxr-xr-x 2 root root    4096 Apr 21 19:25 lib
-rw-r--r-- 1 root root   11357 Apr 21 19:25 LICENSE
-rw-r--r-- 1 root root    1676 Apr 21 19:25 log4j2.xml
drwxr-xr-x 2 root root      25 Apr 21 19:25 META-INF
drwxr-xr-x 3 root root      22 Apr 21 19:25 net
-rw-r--r-- 1 root root   20456 Apr 21 19:25 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) 2022 Klaus Tachtler, <klaus@tachtler.net>.
All Rights Reserved.
Version 1.1.

:!: 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 5812
drwxr-xr-x 2 root root      82 Apr 21 19:25 doc
-rw-r--r-- 1 root root    5028 Apr 21 19:25 footermilter.ini
-rw-r--r-- 1 root root 5897131 Apr 21 19:25 FooterMilter.jar
-rw-r--r-- 1 root root     311 Apr 21 19:25 footermilter.service
drwxr-xr-x 2 root root    4096 Apr 21 19:25 lib
-rw-r--r-- 1 root root   11357 Apr 21 19:25 LICENSE
-rw-r--r-- 1 root root    1676 Apr 21 19:25 log4j2.xml
-rw-r--r-- 1 root root   20456 Apr 21 19:25 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
--2022-04-21 20:36:28--  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]
--2022-04-21 20:36:29--  https://codeload.github.com/tachtler/FooterMilter/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 140.82.121.10
Connecting to codeload.github.com (codeload.github.com)|140.82.121.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘/tmp/master.zip’

master.zip                        [                 <=>                            ]  11.28M  3.43MB/s    in 3.4s    

2022-04-21 20:36:33 (3.32 MB/s) - ‘/tmp/master.zip’ saved [11828710]

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
1cc1df4d0a3dbf38324c1acf425bd13d7912bb09
   creating: FooterMilter-master/
 extracting: 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.2.jar  
  inflating: FooterMilter-master/lib/apache-mime4j-dom-0.8.2.jar  
  inflating: FooterMilter-master/lib/apache-mime4j-storage-0.8.2.jar  
  inflating: FooterMilter-master/lib/commons-cli-1.5.0.jar  
  inflating: FooterMilter-master/lib/commons-codec-1.15.jar  
  inflating: FooterMilter-master/lib/commons-io-2.11.0.jar  
  inflating: FooterMilter-master/lib/commons-lang3-3.12.0.jar  
  inflating: FooterMilter-master/lib/commons-logging-1.2.jar  
  inflating: FooterMilter-master/lib/ini4j-0.5.4.jar  
  inflating: FooterMilter-master/lib/javax.inject.jar  
  inflating: FooterMilter-master/lib/jmilter-0.3.6.jar  
  inflating: FooterMilter-master/lib/jsr305-3.0.2.jar  
  inflating: FooterMilter-master/lib/log4j-api-2.17.2.jar  
  inflating: FooterMilter-master/lib/log4j-core-2.17.2.jar  
  inflating: FooterMilter-master/lib/netty-buffer-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-codec-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-common-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-handler-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/netty-transport-4.1.76.Final.jar  
  inflating: FooterMilter-master/lib/yaranga-0.11.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 5812
drwxr-xr-x 2 root root      82 Apr 21 19:25 doc
-rw-r--r-- 1 root root    5028 Apr 21 19:25 footermilter.ini
-rw-r--r-- 1 root root 5897131 Apr 21 19:25 FooterMilter.jar
-rw-r--r-- 1 root root     311 Apr 21 19:25 footermilter.service
drwxr-xr-x 2 root root    4096 Apr 21 19:25 lib
-rw-r--r-- 1 root root   11357 Apr 21 19:25 LICENSE
-rw-r--r-- 1 root root    1676 Apr 21 19:25 log4j2.xml
drwxr-xr-x 2 root root      25 Apr 21 19:25 META-INF
drwxr-xr-x 3 root root      22 Apr 21 19:25 net
-rw-r--r-- 1 root root   20456 Apr 21 19:25 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/FooterMilterCLIArgsParser.class
/tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.class
/tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterException.class
/tmp/FooterMilter-master/net/tachtler/jmilter/FooterMilter/FooterMilterHandler.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 = 2800) (out= 1191)(deflated 57%)
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 = 25457) (out= 8129)(deflated 68%)
adding: net/tachtler/jmilter/FooterMilter/FooterMilterInitBean.class(in = 1821) (out= 752)(deflated 58%)
adding: net/tachtler/jmilter/FooterMilter/FooterMilterUtilities.class(in = 4964) (out= 2063)(deflated 58%)

:!: 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 !

FooterMilter.jar - META-INF/MENIFEST-MF

* _ = 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) 2022 Klaus Tachtler, <klaus@tachtler.net>.
All Rights Reserved.
Version 1.1.

:!: 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 72
drwxr-xr-x 2 root root    82 Apr 21 19:25 doc
-rw-r--r-- 1 root root  5028 Apr 21 19:25 footermilter.ini
-rw-r--r-- 1 root root 19006 Apr 21 20:38 FooterMilter.jar
-rw-r--r-- 1 root root   311 Apr 21 19:25 footermilter.service
drwxr-xr-x 2 root root  4096 Apr 21 19:25 lib
-rw-r--r-- 1 root root 11357 Apr 21 19:25 LICENSE
-rw-r--r-- 1 root root  1676 Apr 21 19:25 log4j2.xml
drwxr-xr-x 2 root root    25 Apr 21 19:25 META-INF
drwxr-xr-x 3 root root    22 Apr 21 19:25 net
-rw-r--r-- 1 root root 20456 Apr 21 19:25 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 -

  1. Falls ein anderes Zielverzeichnis als /opt verwendet werden soll,
  2. 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 -

  1. Falls ein anderes Verzeichnis als /opt/FooterMilter/footermilter.ini verwendet werden soll,
  2. 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:

  1. Jede Sektion [footer] muss mit dem Wort: footer beginnen.
  2. 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\">--&nbsp;</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\">--&nbsp;</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\">--&nbsp;</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:

FooterMilter - Test E-Mail - multipart (text/plain & text/html)

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">--&nbsp;</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:

FooterMilter - Test E-Mail - multipart (text/plain & text/html) - Ergebnis

E-Mail: text/plain

Nachfolgend die E-Mail im Editor vor dem Absenden, hier z.B. Mozilla Thunderbird:

FooterMilter - Test E-Mail - text/plain

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:

FooterMilter - Test E-Mail - text/plain - Ergebnis

E-Mail: text/html

Nachfolgend die E-Mail im Editor vor dem Absenden, hier z.B. Mozilla Thunderbird:

FooterMilter - Test E-Mail - text/html

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">--&nbsp;</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:

FooterMilter - Test E-Mail - text/html - Ergebnis

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/postfix_centos_7_-_footermilter_einsetzen_footermilter.txt · Zuletzt geändert: 2022/04/21 20:57 von klaus