IMAP - Postfix/Cyrus/Procmail - Mailduplikate Serverseitig in Unterfolder ablegen
Hallo Liste, Sorry, dass ich diese Mail zum zweiten mal schicke aber die Weiterleitung von der Liste landet bei mir jedenfalls als SPAM im entsprechenden Behältnis bei GMX. Da solche Orte nur selten besucht werden schicke ich es noch mal mit einem freien Mailprogramm - mal schauen, ob es da einen Unterschied gibt. Ich brauche einen entscheidenden Tip zu einer Postfix, Procmail, Cyrus Konfiguration. Ich habe mit diesem Gespann einen Mail-Server für einige lokale UNIX-User eingerichtet und es läuft soweit problemlos. Jetzt möchte ich folgendes umsetzen: 1) Für bestimmte Accounts sollen alle eingehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Inbox" des jeweiligen Benutzers landen. 2) Für bestimmte Accounts sollen alle ausgehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Outbox" des jeweiligen Benutzers landen. Zu 2) habe keine Ahnung wo ich da ansetzen soll - Procmail? Postfix? oder Cyrus? Zu 1) habe ich nach einiger Recherche eine Lösung mit Procmail gefunden, die aber irgendwie nicht funktionieren will. Hier ein Paar Konfigurationsauszüge: Datei: /etc/postfix/main.cf mailbox_transport = procmail fallback_transport = cyrus Datei: /etc/postfix/master.cf [...] procmail unix - n n - - pipe flags=R user=cyrus argv=/usr/bin/procmail -r SENDER=${sender} -t -m USER=${user} EXTENSION=${extension} /etc/procmailrc [...] Datei: /etc/procmailrc [...] DELIVERMAIL="/usr/lib/cyrus/bin/deliver" INBOX="$DELIVERMAIL -r $SENDER -m $EXTENSION $USER" INCLUDERC=/var/imap/procmail/user/procmail.$USER [...] Datei: /var/imap/procmail/user/procmail.llckmt (Private Procmail-Regeln für den existierenden Benutzer "llckmt") :0 ic | $DELIVERMAIL -e -a llckmt -m user.llckmt._system-Inbox Das IMAP-Unterverzeichnis _system-Inbox existiert und der user llckmt hat darauf schreibenden zugriff, aber die eingehenden Mails landen nicht dort. Immerhin liefert procmail einen Log-Eintrag in /var/log/procmail procmail: [17707] Tue Jan 24 00:30:01 2006 procmail: Assigning "DELIVERMAIL=/usr/lib/cyrus/bin/deliver" procmail: Assigning "INBOX=/usr/lib/cyrus/bin/deliver -r -m llckmt" procmail: Assigning "INCLUDERC=/var/imap/procmail/user/procmail.llckmt" procmail: Executing "/usr/lib/cyrus/bin/deliver,-e,-a,llckmt,-m,user.llckmt._system-Inbox" procmail: Assigning "LASTFOLDER=/usr/lib/cyrus/bin/deliver -e -a llckmt -m user.llckmt._system-Inbox" procmail: Executing "formail,-f,-I,From " procmail: Executing "/usr/lib/cyrus/bin/deliver,-r,-m,llckmt" procmail: Assigning "LASTFOLDER=/usr/lib/cyrus/bin/deliver -r -m llckmt" Subject: kkkkkkkkk Folder: /usr/lib/cyrus/bin/deliver -r -m llckmt 1700 Wo hackt es nun bei 1) den eingehenden Mails ? Gibt es eine Lösung für 2) die ausgehenden Mails ? Gruß - Artur
Artur Cichosz wrote:
Jetzt möchte ich folgendes umsetzen:
1) Für bestimmte Accounts sollen alle eingehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Inbox" des jeweiligen Benutzers landen.
2) Für bestimmte Accounts sollen alle ausgehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Outbox" des jeweiligen Benutzers landen.
Zu 2) habe keine Ahnung wo ich da ansetzen soll - Procmail? Postfix? oder Cyrus?
Welches Problem möchtest du denn lösen? Warum nicht direkt die eingehende/ausgehende Mail in einen allgemeinen Unterordner leiten? Schau dir mal die Option sender_bcc_maps/recipient_bcc_maps von postfix an. Da kannst du solche Kopien automatisch von Postfix machen lassen. Setze dann nur noch eine entsprechende Erweiterung des lokalen Namens und filtere diese dann in die entsprechenden Unterordner. Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Sandy Drobic schrieb:
Artur Cichosz wrote:
Jetzt möchte ich folgendes umsetzen:
1) Für bestimmte Accounts sollen alle eingehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Inbox" des jeweiligen Benutzers landen.
2) Für bestimmte Accounts sollen alle ausgehenden E-Mails per Kopie auch in einem existierenden IMAP-Unterordner "_system-Outbox" des jeweiligen Benutzers landen.
Welches Problem möchtest du denn lösen? Warum nicht direkt die eingehende/ausgehende Mail in einen allgemeinen Unterordner leiten? Schau dir mal die Option sender_bcc_maps/recipient_bcc_maps von postfix an. Da kannst du solche Kopien automatisch von Postfix machen lassen. Setze dann nur noch eine entsprechende Erweiterung des lokalen Namens und filtere diese dann in die entsprechenden Unterordner.
Sandy
OK. Das scheint die Lösung für beides zu sein. Wie ich es sehe ist das aber so, dass ich in den entsprechenden maps als zieladresse ein externes oder lokales email-postfach angeben muss. Ich will aber die Kopien in einen IMAP-Unterordner eines Postfachs leiten. Wie wäre dafür die Syntax in der map-datei? Also angenommen ich habe den benutzer "blaetergruen" auf dem Cyrus-Server In seinem Postfach hat er auch IMAP-Unterordner "_system-Outbox" und "_system-Inbox" nach Cyrus existieren also folgende Mailboxen user.blaetergruen user.blaetergruen._system-Outbox user.blaetergruen._system-Inbox Folgendes Mapping in "/etc/postfix/sender_bcc" funktioniert ohne Probleme Die versendete Mail landet auch zurück in der Root-mailbox also user.blaetergruen blaetergruen@domain.de blaetergruen Die ausgehenden Mails sollen aber in dem Folder user.blaetergruen._system-Outbox landen also habe ich folgende mapings versucht - beide funktionieren nicht. blaetergruen@domain.de blaetergruen._system-Outbox blaetergruen@domain.de blaetergruen._system-Inbox Geht es also überhaupt, eine Mail direkt an einen Unterordner zu schicken? Gruß - Artur
Artur Cichosz wrote:
Welches Problem möchtest du denn lösen? Warum nicht direkt die eingehende/ausgehende Mail in einen allgemeinen Unterordner leiten? Schau dir mal die Option sender_bcc_maps/recipient_bcc_maps von postfix an. Da kannst du solche Kopien automatisch von Postfix machen lassen. Setze dann nur noch eine entsprechende Erweiterung des lokalen Namens und filtere diese dann in die entsprechenden Unterordner.
OK. Das scheint die Lösung für beides zu sein. Wie ich es sehe ist das aber so, dass ich in den entsprechenden maps als zieladresse ein externes oder lokales email-postfach angeben muss. Ich will aber die Kopien in einen IMAP-Unterordner eines Postfachs leiten. Wie wäre dafür die Syntax in der map-datei?
Also angenommen ich habe den benutzer "blaetergruen" auf dem Cyrus-Server In seinem Postfach hat er auch IMAP-Unterordner "_system-Outbox" und "_system-Inbox" nach Cyrus existieren also folgende Mailboxen
user.blaetergruen user.blaetergruen._system-Outbox user.blaetergruen._system-Inbox
Das Stichwort hier ist recipient_delimiter. Sowohl Postfix als auch Cyrus unterstützen diesen Parameter (üblicherweise ;): user+extention@example.com -> user.extension Postfach (wenn es existiert).
Folgendes Mapping in "/etc/postfix/sender_bcc" funktioniert ohne Probleme Die versendete Mail landet auch zurück in der Root-mailbox also user.blaetergruen
blaetergruen@domain.de blaetergruen
blaetergruen@domain.de blaetergruen+_system-Outbox
Die ausgehenden Mails sollen aber in dem Folder user.blaetergruen._system-Outbox landen also habe ich folgende mapings versucht - beide funktionieren nicht.
blaetergruen@domain.de blaetergruen._system-Outbox blaetergruen@domain.de blaetergruen._system-Inbox Geht es also überhaupt, eine Mail direkt an einen Unterordner zu schicken?
Ja, wenn sowohl Postfix als auch Cyrus sich auf einen Trenner verständigen und die entsprechenden Optionen sauber eingerichtet sind. Postfix: main.cf: recipient_delimiter = + master.cf: cyrus unix - n n - - pipe \ user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Sandy Drobic schrieb:
[...] Ja, wenn sowohl Postfix als auch Cyrus sich auf einen Trenner verständigen und die entsprechenden Optionen sauber eingerichtet sind. Postfix:
main.cf: recipient_delimiter = +
master.cf: cyrus unix - n n - - pipe \ user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
Sandy
Nun. ich habe
main.cf:
recipient_delimiter = +
master.cf:
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m
${extension} -a ${user}
procmail unix - n n - - pipe
flags=R user=cyrus argv=/usr/bin/procmail -r SENDER=${sender} -t -m
USER=${user} EXTENSION=${extension} /etc/procmailrc
sender_bcc:
user@domain.tld user+Draft@domain.tld
Allerdings geht es nicht. Ich bekomme im Log folgenden Fehler:
postfix/pipe[8430]: 823E420564: to=
Artur Cichosz wrote:
Nun. ich habe
main.cf: recipient_delimiter = +
Soweit, so gut.
master.cf: cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} -a ${user} procmail unix - n n - - pipe flags=R user=cyrus argv=/usr/bin/procmail -r SENDER=${sender} -t -m USER=${user} EXTENSION=${extension} /etc/procmailrc
Und hier scheint das Problem zu sein, denn die Extension wird nicht sauber übergeben. Es scheint auch, dass der Username die Domain enthält und Cyrus damit wohl nicht zurechtkommt. Ich kenne mich leider nicht so besonders mit procmail aus. Hast du es mal nur mit dem Cyrus-Transport versucht?
sender_bcc: user@domain.tld user+Draft@domain.tld
Allerdings geht es nicht. Ich bekomme im Log folgenden Fehler:
postfix/pipe[8430]: 823E420564: to=
, relay=procmail, delay=1, status=bounced (data format error) Dementsprechend landet die bcc-version in der Root-Mailbox zusammen mit einer "Undelivered Mail Returned to Sender"-Mail. Kann es sein, dass ich noch Procmail konfigurieren muss da Procmail eigentlich die Mails ausliefert und cyrus-deliver nur als fallback definiert ist?
main.cf: mailbox_transport = procmail fallback_transport = cyrus
Aktuell ist Procmail wie folgt konfiguriert /etc/procmailrc:
LOGFILE="/var/log/procmail" VERBOSE=on DELIVERMAIL="/usr/lib/cyrus/bin/deliver" INBOX="$DELIVERMAIL -r $SENDER -m $EXTENSION $USER"
:0fw | formail -f -I "From "
:0w | $INBOX
:0w { EXITCODE=$? HOST }
So, wie diese procmailrc aussieht, brauchst du procmail nicht unbedingt. Teste es mal mit cyrus als mailbox_transport. Wenn das funktioniert, dann kannst du versuchen, procmail auch zum Laufen zu bringen, indem du die Parameter Stück für Stück überprüfst. Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
OK. Ich habs. Ich habe mailbox_transport=cyrus gesetzt und folgendes in /etc/postfix/master.cf eingetragen cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -r ${sender} -m ${extension} ${user} -a ${user} das -a ${user} am ende ist wohl entscheidend - weiss nicht ganz genau warum, da diese option wohl dazu da ist ein Verzeichnis mit einem anderen Benutzer zu teilen wenn man seine Kennung hinter -a angibt. Anscheinend wird ohne diese Angabe "anonymous"-user angenommen, welcher deliver aufruft und dieser hat wohl keinen zugriff auf das Verzeichnis {$extension} des Benutzers "user". Eigentlich würde ich erwarten dass der aufrufende Benutzer "cyrus" sein müsste, da er durch "user=cyrus" angegeben wird, und dem habe ich alle ACL-Rechte für diese Mailbox gegeben. Die Weisheit habe ich beim googeln zufällig entdeckt :). Jetzt werden die bcc-Kopien wie gewollt eingeordnet. Danke für die hilfreichen Tips. Gruß - Artur
Am Dienstag, 24. Januar 2006 19:52 schrieb Artur Cichosz:
OK. Ich habs.
Ich habe mailbox_transport=cyrus gesetzt und folgendes in /etc/postfix/master.cf eingetragen
cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -r ${sender} -m ${extension} ${user} -a ${user}
das -a ${user} am ende ist wohl entscheidend - weiss nicht ganz genau warum, da diese option wohl dazu da ist ein Verzeichnis mit einem anderen Benutzer zu teilen wenn man seine Kennung hinter -a angibt. Anscheinend wird ohne diese Angabe "anonymous"-user angenommen, welcher deliver aufruft und dieser hat wohl keinen zugriff auf das Verzeichnis {$extension} des Benutzers "user". Eigentlich würde ich erwarten dass der aufrufende Benutzer "cyrus" sein müsste, da er durch "user=cyrus" angegeben wird, und dem habe ich alle ACL-Rechte für diese Mailbox gegeben.
Die Weisheit habe ich beim googeln zufällig entdeckt :).
Wo?
Jetzt werden die bcc-Kopien wie gewollt eingeordnet.
Danke für die hilfreichen Tips.
Gruß - Artur
-- CU at the trails. Es lebe mein tripple triangle.
Boris Se schrieb:
Am Dienstag, 24. Januar 2006 19:52 schrieb Artur Cichosz:
OK. Ich habs.
Ich habe mailbox_transport=cyrus gesetzt und folgendes in /etc/postfix/master.cf eingetragen
cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -r ${sender} -m ${extension} ${user} -a ${user}
das -a ${user} am ende ist wohl entscheidend - weiss nicht ganz genau warum, da diese option wohl dazu da ist ein Verzeichnis mit einem anderen Benutzer zu teilen wenn man seine Kennung hinter -a angibt. Anscheinend wird ohne diese Angabe "anonymous"-user angenommen, welcher deliver aufruft und dieser hat wohl keinen zugriff auf das Verzeichnis {$extension} des Benutzers "user". Eigentlich würde ich erwarten dass der aufrufende Benutzer "cyrus" sein müsste, da er durch "user=cyrus" angegeben wird, und dem habe ich alle ACL-Rechte für diese Mailbox gegeben.
Die Weisheit habe ich beim googeln zufällig entdeckt :).
Wo?
Weiss ich jetzt leider nicht mehr - war ein kurzer Beitrag in einer Mailingliste. Im Grunde hatte jemand das gleiche Problem wie ich und wollte das mit sender_bcc_maps und recipient_bcc_maps lösen wie hier bei mir von Sandy vorgeschlagen. Und genau wie bei mir sind die Mails dabei nur in der Root-Mailbox gelandet anstatt in einem Unterordner. Da hat jemand einfach mit 2 Sätzen erklärt, dass wahrscheinlich das Anhängen von "-a ${user}" an das cyrus-Kommando in der master.cf von Postfix hilft und, dass es damit zu tun hat das per default der user "anonymous" beim Aufruf genötigt wird. Nichts mehr und nichts weniger.
Am Dienstag, 24. Januar 2006 21:49 schrieb Artur Cichosz:
Boris Se schrieb:
Am Dienstag, 24. Januar 2006 19:52 schrieb Artur Cichosz:
OK. Ich habs.
Ich habe mailbox_transport=cyrus gesetzt und folgendes in /etc/postfix/master.cf eingetragen
cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -r ${sender} -m ${extension} ${user} -a ${user}
das -a ${user} am ende ist wohl entscheidend - weiss nicht ganz genau warum, da diese option wohl dazu da ist ein Verzeichnis mit einem anderen Benutzer zu teilen wenn man seine Kennung hinter -a angibt. Anscheinend wird ohne diese Angabe "anonymous"-user angenommen, welcher deliver aufruft und dieser hat wohl keinen zugriff auf das Verzeichnis {$extension} des Benutzers "user". Eigentlich würde ich erwarten dass der aufrufende Benutzer "cyrus" sein müsste, da er durch "user=cyrus" angegeben wird, und dem habe ich alle ACL-Rechte für diese Mailbox gegeben.
Die Weisheit habe ich beim googeln zufällig entdeckt :).
Wo?
Weiss ich jetzt leider nicht mehr - war ein kurzer Beitrag in einer Mailingliste. Im Grunde hatte jemand das gleiche Problem wie ich und wollte das mit sender_bcc_maps und recipient_bcc_maps lösen wie hier bei mir von Sandy vorgeschlagen. Und genau wie bei mir sind die Mails dabei nur in der Root-Mailbox gelandet anstatt in einem Unterordner. Da hat jemand einfach mit 2 Sätzen erklärt, dass wahrscheinlich das Anhängen von "-a ${user}" an das cyrus-Kommando in der master.cf von Postfix hilft und, dass es damit zu tun hat das per default der user "anonymous" beim Aufruf genötigt wird. Nichts mehr und nichts weniger.
Danke. -- CU at the trails. Es lebe mein tripple triangle.
participants (3)
-
Artur Cichosz
-
Boris Se
-
Sandy Drobic