PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cyrus Postfach per Kommandozeile leeren



Stolzi
28.04.04, 20:15
Hallo,
ich suche nach einer Möglichkeit ein Cyrus Postfach per Kommandozeile zu leeren, um das per Script zu erledigen (geht um ein Postfach in das Spam für sa-learn kommt, das dann per Cron ausgeführt wird und danach sollte das Postfach geleert werden...). Ich habe leider die man zu wenig verstanden, sollte es gehen....
Einfach die Dateien rauszulöschen war nicht erfolgreich, da Cyrus einen Index seperat abspeichert und anscheinend durcheinander kommt wenn ich Die Mails einfach von Hand rauslösche.
Kennt jemand einen Weg hierfür?
Danke!
Stolzi

gaansch
28.04.04, 20:29
Das würd ich auch mal gerne wissen.

Russel-Athletic
28.04.04, 23:32
Wo wir gerade dabei sind würde ich es auch gern wissen, am besten in Verbindung mit einem Cronjob.
Ich denke das geht irgendwie über cyradm.

Stolzi
04.05.04, 19:38
Habe ein wenig darüber nachgedacht und denke nicht dass das die Aufgabe von Cyrus ist. Eher die eines Clients wie "mail", der es aber nicht kann was ich aus der man gelesen habe :-(
Kennt niemand einen Mailclient mit dem man aus der Kommandozeile ein Postfach leeren kann?

Harry
04.05.04, 20:34
Hallo,

das leeren des Postfaches ist in der Tat eine Aufgabe des MUA -> Mail User Agents -> Mail-Clients.

1. Relativ einfach würdest Du zu einer halbwegs funktionierenden Lösung kommen, wenn Du das Postfach regelmäßig löschst und dann direkt wieder neu anlegst. Vorausgesetzt, der User cyrus hat kein Passwort, ginge das zum Beispiel so:

# Mailbox loeschen
echo -e "deletemailbox sa-learn\nquit\n" | cyradm --user cyrus localhost
# Mailbox neu anlegen
echo -e "createmailbox sa-learn\nquit\n" | cyradm --user cyrus localhost
# ACL zum loeschen fuer cyrus setzen
echo -e "setacl dummy cyrus c\nquit\n" | cyradm --user cyrus localhost


Bei dieser Lösung könnte jedoch das Problem auftreten, dass genau in dem Moment zwischen der Löschung und dem Neuanlegen der Mailbox eine Mail in das Postfach zugestellt werden soll, diese aber dann mit einem SMPT Errorcode 550 (Mailbox nicht verfügbar) zurück an den Absender gesendet wird.

2. Eine andere mögliche Lösung wäre das Auslesen der Mailbox über einen MUA -> z.B. fetchmail.
In der ~/.fetchmailrc (auf dem Server oder auf einem remote-Host) kannst Du beispielsweise eintragen:

poll <Server> protocol imap username "sa-learn" password "xyz" is <lokaler Dummyuser>
Der Aufruf von "fetchmail" unter dem Account, unter dem der Eintrag angelegt ist, führt dann zum Auslesen der Mailbox und zum Löschen der Nachrichten im Postfach. Allerdings werden die gepollten Mails dann in über den lokalen Mailer dem Postfach von "lokaler Dummyuser" zugestellt. Das muss man dann auch wieder von Zeit zu Zeit löschen ... ;)

3. Bestimmt gibt es auch noch einfachere Lösungen ... wir arbeiten dran ;)

Harry

Stolzi
08.06.04, 07:47
Wens noch beschäftigt ich habe nun noch eine Lösung gefunden die zumindest bei mir ohne Kompromisse funktioniert!
Die Lösung lautet: über Telnet die Mailbox löschen und wieder anlegen. Da werden viell einige sagen: Ja super aber wie soll das über ein Script funktionieren?
Die Lösung lautet "expect". Einfach das Projekt expect installieren. Dann kann man mit zB dieser Befehlsfolge in einer Datei gespeichert ein Postfach "spam" im Konto "learn" auf localhost 127.0.0.1 im Imap Konto 143 löschen:
--> cut
#!/usr/bin/expect
spawn telnet 127.0.0.1 143
expect "OK" {send "? login learn Super-geheimes-Passwort\r"}
expect "OK" {send "? delete INBOX.spam\r"}
expect "OK" {send "? create INBOX.spam\r"}
expect "OK" {send "? logout\r"}
expect {
"Connection closed" {puts stdout "\nMailbox erfolgreich geleert!"}
default {puts stdout "\nFehler!"}
}
<-- cut

Hoffe geholfen zu haben.
Grüsse
Stolzi

zeusnts
08.06.04, 08:30
Hallo

es geht schon das man die Dateien in dem Ordner mittels Script löscht, nur muss man anschliessend ein "reconstruct" der geleerten Mailbox durchführen, damit die Inhalte von cyrus.cache, cyrus.index und cyrus.header wieder richtig gestellt werden.

z.b.:

cyrreconstruct -f user.username.sa-learn

Will man dieses Kommando für mehrere User ausführen einfach anstatt Username ein Prozentzeichen einsetzen.

ausserdem bringt cyrus ein binary mit das sich ipurge nennt, dieses kann mails abhängig von ihrem alter löschen, habe die genaue Funktionsweise dieses Programmes allerdings selber noch nicht ausprobiert, denke aber das es z.B. zum wöchentlichen löschen von "Mistkübeln" nicht uninteressant ist.


lg
tomk

z0ny
10.02.05, 15:51
Den Befehl "cyrreconstruct" gibt es bei mir leider nicht (genau nach soetwas habe ich nämlich gesucht), gibt es denn keine saubere Möglichkeit? Die anderen von oben gefallen mir auch nicht wirklich... :ugly:

Roger Wilco
10.02.05, 16:44
Es werden hier ja nette Verrenkungen vorgeschlagen, dabei bringt Cyrus doch schon was passendes mit: ipurge
Damit kann man Mails eines ganzes Postfachs oder auch nur eines speziellen Ordners nach bestimmten Kriterien (Größe, Alter...) löschen lassen.

schani
23.05.05, 15:52
Wobei ipurge speziel nichts mit cyrus zu tun hat.

Christian

Roger Wilco
23.05.05, 16:55
Wobei ipurge speziel nichts mit cyrus zu tun hat.
Außer, dass es eben als Tool mit Cyrus IMAPd verteilt wird...

stefaan
23.05.05, 22:28
Servus!

Auf der postfix-users Mailingliste gabs die letzten Tage was dazu:
http://listi.jpberlin.de/pipermail/postfixbuch-users/2005-May/thread.html
(Weiter unten, such nach Cyrus).

Grüße, Stefan

Wordooo
24.05.05, 09:50
http://listi.jpberlin.de/pipermail/postfixbuch-users/2005-May/thread.html

ziemlich weit unten is ne nette diskussion darueber und relativ aufschlussreich.


EDIT: oh, den letzten post uebersehen .. sorry

Stolzi
05.06.05, 12:10
Werd ich mir mal ansehn. Danke.
Meine expect Variante läuft aber nun ca. 1 Jahr einwandfrei. Bin voll zufrieden!
Habs jetz durchgelesen... Ich halte meine Expect Variante nach wie vor für die sauberste bzw einfachste Lösung. Da kanns einfach keine Probs mit Cyrus geben, da ich den Ordner gleich leere wies ein Mailclient macht.