Inhaltsverzeichnis

Importschnittstellen

Beschreibung des Imports

Ein Ziel der Entwicklung von Benno MailArchiv 2 war und ist, den Kunden die größtmögliche Flexibilität bei der Anbindung an bestehende E-Mail-Systeme zu geben. Die Schnittstelle zum Mailimport ist daher bewusst einfach und generisch gehalten:

E-Mails werden einfach über eine Dateisystem-Schnittstelle importiert. Die zu importierenden E-Mails werden als Dateien im RFC5322 - Internet Message Format (.eml-Dateien - also im Originalformat, wie sie im Internet übertragen werden) in dem Import-Verzeichnis (standardmäßig /srv/benno/inbox) abgelegt. Benno MailArchiv liest diese Dateien ein, archiviert sie und indexiert den Inhalt der E-Mail und der Anhänge.

Dieses Verfahren erlaubt die generische Anbindung faktisch jedes beliebigen E-Mail-/Groupwaresystems.

Beim Import von E-Mails in Benno MailArchiv sind folgende Punkte zu beachten.

Atomares Kopieren

Benno MailArchiv „scannt“ die Inbox (also das Import-Verzeichnis) laufend auf neue, zu archivierende Mails (also: Dateien). Sobald hier eine Datei angelegt ist (und zum Namensmuster der zu importierenden Mails passt - Standard ist .eml - vgl. auch die Installationsanleitung) wird diese Mail bzw. Datei von Benno MailArchiv eingelesen und verarbeitet. Benno MailArchiv erkennt allerdings nicht, ob der Schreibvorgang in die Datei schon vollständig abgeschlossen ist, oder ob das Ablegen der Mail in die Datei zum Zeitpunkt des Lesens noch vor sich geht. Um sicher zu stellen, dass der Schreibvorgang in die Datei abgeschlossen ist (also die Mail vollständig in der Datei abgelegt ist), bedient man sich sinnvollerweise eines kleinen Tricks.

Umgangssprachlich formuliert, wird die Mail zunächst in eine temporäre Datei geschrieben. Diese temporäre Datei wird von Benno MailArchiv ignoriert, da Benno MailArchiv nur Dateien mit einem bestimmten Namensmuster (Standard: *.eml) verarbeitet. Somit kann die temporäre Datei auch genau in dem Moment mit der Mail gefüllt werden, in der Benno MailArchiv nach neuen Mails im Verzeichnis Ausschau hält. Sobald die Mail abgelegt ist (= Schreibvorgang beendet), wird die temporäre Datei geschlossen. Damit Benno MailArchiv sie jetzt auch findet und archiviert, muss sie nur noch „umbenannt“ werden, so dass sie in das Namensschema der Dateien passt, die Benno MailArchiv importiert (*.eml). Das Umbenennen von Dateien mit dem Linux-/Unix-Kommando „mv“ (move) ist nicht zwangsläufig atomar, aus diesem Grunde sollte unbedingt die nachstehend beschriebene Prozedur eingehalten werden, um die Datei mit atomaren Schritten umzubenennen und auf diesem Weg für Benno MailArchiv sichtbar zu machen.

Das „Umbenennen“ der Datei auf atomarer Ebene (also ohne „mv“) läßt sich sehr einfach bewerkstelligen: Es wird ein Hardlink auf die Datei erzeugt. Der Hardlink ist zwangsläufig atomar, da - vereinfacht gesagt - ein Inode im Verzeichnis angelegt wird. Nachdem der Link erstellt wurde, wird die temporäre Datei gelöscht. Über diesen „Trick“ wird die Datei so umbenannt, dass sie dabei garantiert geschlossen ist und bleibt. Dieses Verfahren wurde gewählt, um komplizierte, fehlerträchtige und teilweise nicht portable Locking-Implementierungen bei der Implementierung von Konnektoren zum Import von E-Mails zu vermeiden.

ACHTUNG: Hardlinks funktionieren nicht über Dateisystemgrenzen hinweg! Dieser Vorgang sollte daher nur innerhalb des „inbox“-Verzeichnisses angewendet werden!!

Das nachfolgende Beispiel verdeutlicht den Ablauf, der für jede zu archivierende Mail durchgeführt werden sollte:

Shellscript-Beispiel

cp importmail.eml /srv/benno/inbox/importmail.tmp
ln /srv/benno/inbox/importmail.tmp /srv/benno/inbox/importmail.eml
rm /srv/benno/inbox/importmail.tmp

Import-Namensmuster

Über das Namensmuster kann gesteuert werden, welche Dateien aus dem Inbox-Verzeichnis ins Archiv importiert werden sollen. Standardmäßig werden alle Dateien mit der Endung „.eml“ archiviert.

Das Namensmuster der zu importierenden Dateien wird in der Datei /etc/benno/benno.xml im Tag <directorywatcher>...</directorywatcher> festgelegt.