Inhaltsverzeichnis

Die einfach skalierbare Architektur von Benno MailArchiv bietet eine einfache Anbindung der Benno MailArchiv Teilsysteme an Komponenten von Drittherstellern.

Beispiel-Setup

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.

Backend System

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.

Mail-Setup

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.

Automatisches Provisioning

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.

benno-writeconfig.sh

#!/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.

Mail-Import

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.

Authentisierung

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.