Serverseitig Mail als gelesen markieren ?

Thorti

New Member
Hy,

ich suche schon seit ner Weile eine Möglichkeit, wie ich serverseitig Mails als gelesen markieren kann.

Ich arbeite mit IMAP und habe Spamassassin auf den Server laufen zum SPAM markieren. Dann habe ich qmail als MTA und Procmail zum sortieren in diverse IMAP-Ordner, die ich dann mit courier-IMAP als IMAP-Server bereitstelle zum Abrufen.

Ich habe in Procmail eine Regel erstellt, daß Mails, die als SPAM von Spamassassin markiert wurden, in einen Ordner namens SPAM verschoben werden. Wenn ich jetzt mit einem Mail-Programm mich mit dem Konto verbinde, erscheinen die SPAMs in dem Ordner auch als "ungelesen" und somit als "neue Mail", was von dem Mail-Programm entsprechend angezeigt wird.

Natürlich kann ich clientseitig entsprechende Regeln (Mail als gelesen markieren, wenn X-Spam-Flag = Yes) definieren, was ich auch gemacht habe, aber es funktioniert nicht so, wie ich mir das vorstelle.
Bei Entourage (Outlook unter Mac) wird die Regel erst angewendet, wenn ich den Ordner SPAM anklicke (die vollständige Mail runtergeladen wird) und bei Apple Mail funktioniert es irgendwie überhaupt nicht (vermute die Regeln greifen nur in der Inbox und nicht in anderen Ordnern).

Daher mein Anliegen, daß die Mails serverseitig schon als gelesen markiert werden. Irgendwie muß es gehen, weil wenn ich Mails in einem Programm als gelesen markiere, dann "weiß" das andere Programm das auch, wenn ich es später irgendwann mal starte.

Anfangs war ich ausgegangen, daß nur Mails als ungelesen angezeigt werden, wenn sie sich im "new"-Verzeichnis befinden auf dem Server, aber leider stellte sich das als Irrtum raus. Auch neue Mails, die von Procmail direkt ins "cur"-Verzeichnis geschoben wurden, werden als neue Mails von den Programmen erkannt.

Gibt es da irgendeine Möglichkeit ?

Als MTA verwende ich qmail (mit Greylisting)
Zum Sortieren Procmail
und als IMAP-Server courier-IMAP
Das ganze unter Plesk 8.1.1 und OpenSuSE 10 (1blu vServer).

Thorti
 
Das Problem hatte ich auch mit Courier, aber die Lösung ist "eigentlich" einfach, wenn man sich anschaut, was beim Lesen mit dem Client Passiert. :D

Hier eine ungelesene Mail in .Spam/new:

Code:
-rw-------  1 web1p1 poponly  19K Jun 11 08:18 1181542732.30775_2.mail.XXX.de

und hier die gelesene in .Spam/cur:

Code:
-rw-------  1 web1p1 poponly  19K Jun 11 08:18 1181542732.30775_2.mail.XXX.de[B]:2,[/B]

Das ganze steht dann auch noch in der Indexdatei in

Code:
.Spam/courierimapuiddb

Am einfachsten sprichst du da mit Procmail ein Script an, welches diese änderungen vornimmt.
 
Hier mal ein Ausschnitt ausm "cur"-Verzeichnis:

Code:
-rw-------  1 popuser popuser  2930 Jun  7 15:03 msg.-RRjI:2,S
-rw-------  1 popuser popuser  3406 Jun  7 22:49 msg.-SRjI:2,S
-rw-------  1 popuser popuser  4361 Jun  8 12:29 msg.-TRjI:2,S
-rw-------  1 popuser popuser  2363 Jun  9 19:33 msg.-URjI:2,S
-rw-------  1 popuser popuser  8615 Jun 11 09:10 msg.-iyoI:2,S
-rw-------  1 popuser popuser  3128 Jun  8 16:39 msg.0FyoI:2,S
-rw-------  1 popuser popuser 11388 Jun  6 04:18 msg.0GyoI:2,S

Am einfachsten sprichst du da mit Procmail ein Script an, welches diese änderungen vornimmt.

Hast Du da ein Beispiel parat ? Ich wüßte im Moment nicht genau, wie ich da ansetzen sollte. Datei umbenennen okay, aber in der Index-Datei rumfuhrwerken, da bin ich noch nicht Experte genug :)

Thorti
 
Mir fallen spontan 2 Möglichkeiten ein:
a) PHP-Script mit imap-Funktion, welches die Mails als gelesen ([http://www.php.net/manual/de/function.imap-setflag-full.php]imap_setflag_full[/url]) markiert.
b) Ein Perl-Script mit Mailbox-Funktionen.
(Evtl. gibt es auch ein entsprechendes Pear-Modul für PHP?)

huschi.
 
Noch ne Frage:

Gibts in den Procmail-Regeln ne Möglichkeit ne Variable zu übergeben, in der der Dateiname oder der komplette Pfad der Message drin steht ? Im Logbuch taucht der jedenfalls auf, aber wie komme ich über eine Regel daran ?

Code:
procmail: Assigning "LASTFOLDER=/var/qmail/mailnames/xxxx.de/alias/Maildir/new/msg.EYyoI"
procmail: Opening "/var/qmail/mailnames/xxxx.de/alias/Maildir/new/msg.EYyoI"
procmail: Acquiring kernel-lock
From alias@yyyy.de Thu Jun 14 00:37:16 2007
 Subject: Test 4
  Folder: /var/qmail/mailnames/xxxx.de/alias/Maildir/new/msg.EYyoI       871

Mein Ansatz ist, daß ich mit mv einfach die Datei umbenennen will. Also aus "msg.EYyoI" soll "msg.EYyoI:2,S" werden. Habe getestet, daß das ausreicht, um die Mail als gelesen zu markieren. Ich muß nicht noch in der Index-Datei rumfuhrwerken.
 
Nein, eine solche Regel kann es nicht geben da alle Regeln vor dem Ablegen im Maildir verarbeitet werden.

huschi.
 
Also ich habs jetzt per Script gelöst. Ist vielleicht nicht die beste Methode, aber sie funktioniert bisher ;-)

Ich habe die .qmail angepasst:

Code:
| /usr/local/psa/bin/psa-spamc accept
| preline /usr/bin/procmail -m .procmailrc
| read SPAM

und das Script "read" erstellt:

Code:
#!/bin/sh
DIR=Maildir/.$1;

# Pruefen, ob neue Mails vorhanden sind
COUNT=`find $DIR/new -type f | wc -l`

if [ "$COUNT" != "0" ]; then

# Mails als gelesen markieren
for i in $DIR/new/*
do
  x=$i':2,S';
  mv $i $x;
done
# Mails verschieben
mv $DIR/new/* $DIR/cur/
fi

Möchte ich weitere IMAP-Verzeichnisse als gelesen markieren, dann trage ich in der entsprechenden .qmail die weiteren Ordner ein. z.B.

Code:
| /usr/local/psa/bin/psa-spamc accept
| preline /usr/bin/procmail -m .procmailrc
| read SPAM
| read Cronjobs

Thorti
 
Back
Top