Die einfach skalierbare Architektur von Benno MailArchiv bietet eine einfache Anbindung der Benno MailArchiv Teilsysteme an Komponenten von Drittherstellern.
Im Folgenden ist im Sinne eines „proof of concept“ beschrieben, wie die Anbindung von Benno MailArchiv in eine bestehende Hosting-Infrastruktur in der Praxis beispielhaft implementiert werden kann. Hierbei werden die folgenden Konfigurationen beschrieben.
Die Beispiele erläutern mit einfach nachvollziehbaren Shell-Skripten und einfachen Textdateien als Ersatz für an dieser Stelle typischerweise eingesetzte Datenbanken die Anbindung an die jeweiligen Backend-Systeme eines Hosters.
Aus den hier dargelegten Skripten und „Beispiel-Datenbanken“ kann eine Integration in die eigenen Hosting-Systeme schnell abgeleitet und in einer beliebigen Programmiersprache der Wahl implementiert werden.
Das in diesem Proof of Concept (PoC) verwendete fiktive Backend-System speichert die Daten in einer SQLite-Datenbank provisioning.sqlite. Die Datenbank ist hier exemplarisch mit vier Tabellen abgebildet.
In diesem Szenario unseres fiktiven Hosters sind weder Login-Namen, Mailadressen noch Aliasadressen fix den Kunden-Mailboxen zugeordnet, wie dies in der Praxis häufig der Fall ist. In diesem Beispiel-Setup können E-Mail-Adressen und Aliase des Kunden jederzeit flexibel zwischen den Konten des Kunden hin und her geschoben werden. Das nachfolgende Datenbankschema ist daher etwas umfangreicher, als bei einem einfachen Setup, wo E-Mail-Adresse (+ Alias-Adressen) = Mailbox ist.
Alle ein- und ausgehenden E-Mails werden über ein Mail-Gateway (MTA) geroutet. Auf diesem ist ein benno-milter konfiguriert, der von jeder E-Mail eine Kopie zwischenspeichert.
Die zwischengespeicherten E-Mails werden per SMTP an den auf dem Benno MailArchiv-Server laufenden benno-smtp Daemon übermittelt. Die lokale Kopie der Mail auf dem MTA wird anschließend gelöscht.
Falls ein Kunde das Produkt Benno MailArchiv im Online-Portal des Hosters bucht, wird die Option in der Datenbank des Provisioning-Systems eingetragen und anschließend die Aktualisierung der Benno MailArchiv Konfiguration getriggert.
Die Konfigurationsdatei benno.xml
wird dabei von benno-writeconfig.sh
automatisch aus der Datenbank heraus erstellt (generiert). Anschließend wird die Konfiguration der Dienste neu geladen.
#!/bin/sh # # benno-writeconfig.sh ( cat xml_header.tpl sqlite provisioning.sqlite \ 'SELECT c.displayname,m.maildomain FROM customer AS c ,maildomain AS m WHERE c.customer_id=m.customer_id;' |\ while read -d\| domain customer; do cat xml_container.tpl |sed -e "s/###CUSTOMER###/$customer/g" -e "s/###DOMAIN###/$domain/"; done cat xml_footer.tpl ) > /etc/benno/benno.xml service benno-archive reload service benno-rest reload
Das Script benno-writeconfig.sh
erstellt die benno.xml
aus den Template-Dateien xml_header.tpl, xml_container.tpl, xml_footer.tpl. Im Container-Template wird der Name des Kunden sowie die Domain(s), die in diesem Container archiviert werden sollen, eingesetzt.
Danach wird die Konfiguration der Dienste benno-archive und benno-rest neu geladen.
Die Kopien der E-Mails werden als .eml-Dateien vom MILTER auf dem Mail-Gateway (MTA) im Verzeichnis /milter/spool/dir
gespeichert.
Der Cron-Job milter2smtp liest die .eml-Dateien. Mit Hilfe des Wertes des X-REAL-RCPTTO-Headers wird dann die Mailbox-Zuordnung aus der Provisioning-Datenbank ermittelt.
Im Beispiel-Setup liefert die Abfrage für den Alias info@hansen-und-meyer.de die Mailbox-Id „m3“. Diese Information wird vor dem Übertragen der E-Mail an benno-smtp als zusätzlicher Header in die E-Mail eingetragen. Somit wird die Zuordnung der einzelnen Mail zur Empfänger-Mailbox zum Zeitpunkt der Zustellung in Index und Archiv festgehalten.
Bei der Authentisierung am Web-Interface von Benno MailArchiv wird dem Benutzer, dem die Mailbox m3 zugeordnet ist, die E-Mail Adresse m3@benno-mailarchiv.local als für ihn gültige Adresse übergeben. Damit kann er auf die oben importierte E-Mail zugreifen.
Der für diese Zwecke beim Archivieren in die Mail eingefügte Header X-Benno-MAILBOXID wird von Benno MailArchiv bei Anzeige oder Download der Mail aus dieser entfernt.