Procmail: Passa alla cartella e segna come lettura
-
28-10-2019 - |
Domanda
Una semplice domanda: voglio spostare le e -mail con un certo soggetto a una cartella e contrassegnarle come letto in seguito. Moving funziona per me con
:0: H
* ^Subject:.*(ThisIsMySubject)
$HOME/mail/ThisIsMyFolder
Ma come contrassegnare le posta come lette?
Soluzione
NOTA: aggiornato dec. 16 ° 2011
Soluzione Procmail
La seguente ricetta funziona per me. .Junk
è la cartella spam:
MAILDIR=$HOME/Maildir
:0
* ^X-Spam-Flag: YES
{
# First deliver to maildir so LASTFOLDER gets set
:0 c
.Junk
# Manipulate the filename
:0 ai
* LASTFOLDER ?? ()\/[^/]+^^
|mv "$LASTFOLDER" "$MAILDIR/.Junk/cur/$MATCH:2,S"
}
Soluzione MailDrop
Prefazione: Recentemente avevo (no, volevo) fare la stessa cosa con un MailDropfilter. Dopo aver letto man maildropfilter
Ho inventato la seguente ricetta. Sono sicuro che le persone troveranno questo a portata di mano - lo so che lo faccio.
L'esempio seguente segna nuove e -mail come lette ma anche vecchi messaggi non letti.
SPAMDIRFULL="$DEFAULT/.Junk"
if ( /^X-Spam-Flag: YES$/ || \
/^X-Spam-Level: \*\*\*/ || \
/^Subject: \*+SPAM\*/ )
{
exception {
cc "$SPAMDIRFULL"
`for x in ${SPAMDIRFULL}/new/*; do [ -f $x ] && mv $x ${SPAMDIRFULL}/cur/${x##*/}:2,S; done`
`for x in ${SPAMDIRFULL}/cur/*:2,; do [ -f $x ] && mv $x ${SPAMDIRFULL}/cur/${x##*/}S; done`
to "/dev/null"
}
}
Nota che il exception
Il comando potrebbe leggere controintuitivo. Il manuale afferma quanto segue:
L'istruzione eccezionale intrappola errori che normalmente causerebbero la risoluzione di MailDrop. Se si riscontra un errore fatale ovunque all'interno del blocco di istruzioni racchiuse dalla clausola di eccezione, l'esecuzione riprenderà immediatamente in seguito alla clausola di eccezione.