SMTP| | +----v-------+ | | | MILTER | MAILGW1 | +--------+ +------------------+ | | | | | | | +----v-------+ | | |MANDANT1| | | | | | | +------->| BENNO |--------| | | | | | +----v-------+ | | |MANDANT2| | | | | | | | | MAILGW2 | +--------+ +------------------+ | | | MILTER +------------+
Falls die E-Mails aus mehreren unterschiedlichen Quellsystemen importiert werden, besteht die Gefahr, daß eine E-Mail mehrfach oder fälschlicherweise importiert wird.
Im Beispiel sind zwei Mandanten auf dem Benno System konfiguriert. Jeder Mandant ist so konfiguriert, daß alle E-Mails von oder an seine Domain in Benno archiviert werden.
Jeder Mandant hat ein eigenes Mailgateway, über das er seine E-Mails empfängt und verschickt. Die Anbindung von Benno erfolgt mittels MILTER auf den beiden Mailgateways.
Falls Mandant1 eine E-Mail an Mandant2 schickt, läuft diese über beide Mailgateways und wird von beiden MILTERn an Benno MailArchiv übertragen. Beim Versand von MAILGW1 an MAILGW2 wurden der Mail dabei von den SMTP-Servern zusätzliche Header hinzugefügt, so daß sich die Checksummen der E-Mails unterscheiden. Die Mail wird folglich in jedem der beiden Mandanten doppelt importiert.
Ein anderes Problem tritt auf, falls die E-Mail z.B. von MAILGW1 angenommen, aber der Weiterversand an MAILGW2 fehlgeschlagen ist. Hier muss sichergestellt werden, daß die E-Mail ausschließlich bei Mandant1, aber nicht bei Mandant2 importiert wurde.
Die oben beschriebenen Probleme beim Setup mit mehreren Import-Quellen wird vermieden, wenn der zu importierenden E-Mail die Information über das Quellsystem mitgegeben wird und dieses als Import-Kriterium in der Container-Konfiguration (und damit beim Mandanten) festgelegt wird.
Die Übertragung vom Quellsystem zur Import-Schnittstelle von Benno MailArchiv bietet die Möglichkeit, den Header X-BENNO-GW zu setzen. Im Beispiel z.B MAILGW1 oder MAILGW2. Je nach Import-Tool kann der Header dementsprechend konfiguriert werden.
Der MILTER Daemon setzt den Header auf den Wert, der in der Konfigurationsdatei /etc/default/benno-milter
MILTERARGS="-x MANDANT1"
Alternativ ist eine Konfiguration bei der Übertragung der Mails per SMTP mit benno-milter2smtp möglich. Hier wird der Kommandozeilenparameter -x MANDANT1 im Cron-Job gesetzt.
Hier kann der Paramameter ebenfalls als -x MANDANT1 per Kommandozeile übergeben, oder in der Konfigurationsdatei mit dem Parameter extraheader_value = MANDANT1 festgelegt werden.
Das Tool benno-imapimport setzt den Header mit -x MANDANT1 oder in der Konfigurationsdatei extraheader = X-BENNO-GW: MANDANT1.
Im „<directorywatcher />“ wird der Header X-BENNO-GW in <senderheaders /> und in <secretheaders /> aufgeführt. Damit wird der Wert dieses Headers in der Container-Konfiguration als Kriterium für „sender“ betrachtet. Die Einstufung als Secretheader bewirkt, daß der Header nicht in der E-Mail angezeigt wird.
<directorywatcher directory="/srv/benno/inboxes/mx1" pattern=".*.eml"> <mailfile> <senderheaders> <name>X-REAL-MAILFROM</name> <name>X-BENNO-GW</name> <name>From</name> </senderheaders> <recipientheaders> <name>X-REAL-RCPTTO</name> <name>BCC</name> <name>To</name> <name>Cc</name> </recipientheaders> <secretheaders> <name>X-REAL-MAILFROM</name> <name>X-REAL-RCPTTO</name> <name>X-BENNO-GW</name> <name>BCC</name> </secretheaders> </mailfile>
In den Kriterum für den Container kann der Wert von X-BENNO-GW als zusätzliches oder ausschließliches Kriterium für die Zuordnung zum Container angegeben werden.
Falls die Importquelle (MILTER, benno-exchange) nur einen einzelnen Mandanten importiert reicht hier die Angabe des X-BENNO-GW Headers zur Zuordnung. Wenn dem Mandanten später weitere Domains zugeordnete werden, muss die Konfiguration hier nicht geändert werden.
<simplecontainer> <identifier>Mandant1</identifier> <conditions> <domain sender="true">MAILGW1</domain> </conditions> ...
In diesem Fall muss der Wert von X-BENNO-GW und die Domain des Mandanten berücksichtigt werden.
<simplecontainer> <identifier>Mandant1</identifier> <conditions> <and> <domain sender="true">MAILGW2</domain> <or> <domain sender="true" recipient="true" from="true" to="true" cc="true">mandant2.de</domain> <domain sender="true" recipient="true" from="true" to="true" cc="true">mandant2.com</domain> </or> </and> </conditions> ...