Hallo zusammen,
so ganz klappt das noch nicht. Ich möchte aber nochmal kurz das Konzept bei meinem Mailsystem erläutern.
Wie bereits gesagt wird beim Provider nur eine Sammelbox, in welcher alle Mails für alle User landen, gefetcht. Das fetchen dieser Sammelbox wird mit dem, speziell für diesen Zweck angelegten, User "sammelbox" durchgeführt.
Von diesem User sammelbox werden die Mails dann auch an IMAP übergeben. Hierbei gehen die Mails durch das Sieve-Skript.
Das Konzept bei dem Sieve-Skript ist so. Das die Mails nach verschieden Kriterien untersucht werden und in die entsprechende Box einsortiert werden. Am Ende gibt es ein letztes Aufangbecken. Hier landen alles Mails die durch eine Regel nicht zuzuordnen waren im Shared-Folder "unverteilt"
Nachfolgend das fast komplette Skript. Ich habe versucht es verständlich zu kommentieren
Code:
#
# Zunächst werden allen Mails die vom Spam-Filter das X-Spam-Flag
# verpasst bekamen in einen Shared-Folder für Spam gepackt
#
# Wenn das Zutrifft soll die weitere Überprüfung abgebrochen werden, also # stop
require "fileinto";
if header :matches ["X-Spam-Flag"] "YES" {
fileinto "public.share.Spam";
stop;
}
#
# Als nächstes werden alle Mails die vom Antivir-Mailgate generiert werden
# ebenfalls in einen speziellen Shared-Folder sortiert
#
if address :matches ["from"] "AvMailGate@*" {
fileinto "public.share.Virenmeldungen";
stop;
}
#
# Als nächstens werden die System-Mails welche das System generiert
# ebenfalls in einen speziellen Shard-Folder sortiert.
#
if address :matches ["to", "cc"] "root@*lokaledomain" {
fileinto "public.share.Systemmails";
stop;
}
#
# Nun kommt für jeden der "richtigen" User der nachfolgende Block
#
if address :matches ["to", "cc", "bcc"] "andrea*@unseredomain.de" {
fileinto "user.andrea";
}
if address :matches ["to", "cc", "bcc"] "greiner*@unseredomain.de" {
fileinto "user.andrea";
}
if header :contains ["Received"] "andrea@unseredomain.de" {
fileinto "user.andrea";
}
if header :contains ["Received"] "greiner@unseredomain.de" {
fileinto "user.andrea";
}
[...]
#
# So und am Ende kommen die gemeinsamen Boxen wie info, office, support # etc.
#
if address :matches ["to", "cc", "bcc"] "info*@unseredomain.de" {
fileinto "public.share.SWS.Zentraleingang";
stop;
}
if address :matches ["to", "cc", "bcc"] "office*@unseredomain.de" {
fileinto "public.share.SWS.Zentraleingang";
stop;
}
if address :matches ["to", "cc", "bcc"] "support@unseredomain.de" {
fileinto "public.share.SWS.Support";
stop;
}
if address :matches ["to", "cc", "bcc"] "bug@unseredomain.de" {
fileinto "public.share.SWS.Support";
stop;
}
#
# Und am Ende der Ausputzer der alles was nicht zuzuordnen war in den
# Shared-Folder "unverteilt" soriert
#
else {
fileinto "public.share.Unverteilt";
}
Bei allen Regeln hatte ich nun zunächst wie es angeraten wurde aus elsif ein if gemacht. Weiterhin habe ich zunächst alle stop-Anweisungen entfernt. Dies hatte aber den Effekt das eine Kopie aller! Mails in meinem Unverteilt gelandet sind was natürlich weniger sinnvoll ist.
Nun habe ich bei den letzten Boxen (info, office, support und bug) die Stop-Zeile wieder eingefügt und wenn ich nun eine Mail von extern an einen realen User UND! eine dieser Boxen sende klappt das auch. Die Mail ist landet dann sowohl bei dem User in der Inbox und z.B. im Support.
Sende ich eine Mail aber NUR an einen User habe ich wieder den Effekt das sie sowohl in der Inbox des Users UND zusätzlich im Unverteilt landet.
Mir ist auch klar warum. Denn die Regelkette wird dabei nicht mit Stop verlassen aber mir ist absolut nicht klar wie ich das Skript strukturieren muß damit es funktioniert.
Ich bräucht vor der letzten Regel für unverteilt eine Anweisung das wenn eine oder mehrere Regeln bereits zutrafen die letzte nicht mehr durchlaufen wird.
Viele Grüße
pixel
Lesezeichen