Procmail

Från Lysators datorhandbok, den ultimata referensen.
Version från den 23 september 2022 kl. 22.09 av Jaadu (diskussion | bidrag) (Lade till avsnitt för engångsaddresser)
Hoppa till navigering Hoppa till sök


Varning! Den här informationen är troligtvis föråldrad. Om du har tid, kontrollera gärna hur verkligheten ser ut och uppdatera den här sidan.


Denna text riktar sig till de som bävar varje gång de skall kolla sin inkomna e-post, de som ogillar oredan bland alla inkomna brev. Ångrar du att du gick med i ytterligare e-post-listor? Svär du över alla spams om allt från hårborttagningsmedel till snabba pengar? Då kan det vara en idé att automatiskt sortera inkommande brev med hjälp av programmet procmail.

Denna handledning förutsätter grundläggande kunskaper i UNIX.

Procmail

Procmail är en kraftfull samling verktyg för automatisk mailhantering, utvecklad av Stephen R. van den Berg. Procmail kan hantera mail när de anländer eller redan anlända mail i din mailbox. För att styra procmail finns en kraftfull uppsättning filter för att filtrera på önskat sätt. För varje filter anges vad procmail skall göra om ett matchande brev anländer, det vanligaste är att man flyttar brevet till en mailbox för just det filtret.

Till procmail finns färdiga paket för spam-filtrering, exempelvis The Spam Bouncer.

Procmail på Lysator

Procmail är installerat som /usr/bin/procmail på mailservern, och som /usr/local/bin/procmail på mailexec-datorn.

Att sätta upp procmail på sitt konto

För att procmail skall fungera måste det finnas en inställningsfill '.procmailrc' och ett directory '.procmail' innehållande filter. Procmail kommer också att placera loggar över hanteringen i detta directory. För att automaiskt köra procmail vid inkommande post måste man ändra sin '.forward'. Exempel på detta finns nedan.

De exempel som finns i denna text gör så att inkommande mail placeras i det directory som är mail-directory för mailklienten Pine, '~/mail'. Directoryt innehåller en mailfil för varje mailbox. Eventuellt vill man lägga inkommande mail i ett eget directory, exempelvis om man vill använda Pines funktion för flera inboxar.

Att skapa en '.procmailrc'

Det första steget är att skapa inställningsfilen '.procmailrc' i roten på din mailspool (/var/mail/$USER). Följande exempel kan med fördel användas.

    #Set on when debugging
    VERBOSE=off

    # Trailing slash means that we're delivering to a Maildir - which we will.
    MAILDIR=$HOME/Maildir/
    
    # Default mail delivery location for mails that doesn't match any procmail rules.
    DEFAULT=$MAILDIR
    
    #Directory for storing procmail log and rc files
    PMDIR=$HOME/.procmail
    
    LOGFILE=$PMDIR/log
    INCLUDERC=$PMDIR/rc.testing
    INCLUDERC=$PMDIR/rc.maillists

På grund av nuvarande mailimplementation skall MAILDIR vara satt till $HOME/Maildir, eftersom det är där dina brev finns på mailservern.

För att procmail skall våga använda filen får den inte vara skrivbar för någon annan än dig själv (t ex mode 644).

Skapa en filterfil

För att procmail skall veta vad du vill göra med dina mail behöver den filterfiler. I slutet av ovanstående '.procmailrc' inkluderas två filer 'rc.testing' och 'rc.maillists'. Den första av dessa filer skall vi skapa för att testa procmail och den andra för att hantera maillistor.

Skapa först directoryt '.procmail', vilket skall innehålla filterfilerna. I detta directory skapar du filen 'rc.testing', med följande innehåll:

    :0:
    * ^Subject:.*test
    .test/

Detta filter kommer flytta alla inkommande brev där brevets "Subject" innehåller ordet "test" till Maildir-foldern "test" inuti din vanliga Maildir. Filtrets utformning och innehåll förklaras i avdelningen om maillistor nedan.

Skapa '.forward'

För att procmail skall köras vid inkommande post anger man detta i filen '.forward'. Denna fil körs alltid vid inkommande post, namnet kommer av att filen oftast används för att vidarebefodra post till andra maskiner. Skapa nu filen '.forward' i roten på din mailspool (/var/mail/$USER) och se till att den innehåller följande sträng, inklusive citationstecknen i början och slutet.

  • "|exec /usr/bin/procmail"

För att din '.forward' ska fungera får den inte vara skrivbar för någon annan än dig själv (t ex mode 644).

Om du använder din '.forward' för att vidarebefodra post och vill fortsätta med detta ser du till att din forward-instruktion ligger på en egen rad i filen.

En första test av procmail

Det nu dags att testa procmail och ditt test-filter. Skicka därför ett brev till dig själv där subject-raden innehåller ordet "test". Om procmail fungerar skall detta brev hamna i mailfilen '~/mail/in.test'. Kolla med Pine så att foldern "in.test" finns och innehåller ditt brev. Du bör också testa att skicka ett brev utan ordet "test" i subject-raden, för att se så procmail inte filtrerar dessa. Om procmail inte fungerar som väntat bör du läsa igenom ovanstående steg igen.

När du med ovanstående test klargjort att procmail fungerar kan du kommentera bort den rad i din '.procmailrc' som inkluderar test-filtret. Kommentering sker genom att placera tecknet "#" i början av raden.

Hantering av maillistor

Det är nu dags att börja använda procmail till något användbart, att hantera inkommande brev från maillistor. Skapa filen '~/.procmail/rc.maillists' med följande innehåll:

   :0
   * ^TOcuckoo-list
   .cuckoo-list/
   :0
   * ^Subject:.*freshmeat
   .freshmeat/

Detta exempel innehåller två filter, ett som hanterar brev från maillistan "cuckoo-list" och ett som hanterar nyhetsbrev från http://freshmeat.net/. Det första filtret kollar på brevets adress-rad och det andra på brevets subject-rad.

Filtrens syntax:

    :0                 Börja nytt filter
    :                  Använd lock-file 
    *                  Börja matchning
     ^TO               Matcha "To:", "Cc:" och andra synonymer för adressater
                       i början av en rad, följt av namn på adressat
   cuckoo-list         Matcha adressater innehållande "cuckoo-list" 
   .cuckoo-list/       Om brevet matchar, placera det i $MAILDIR/.cuckoo-list/

Normalt sett sker matchningen med hjälp av vanliga reg-expar. I ovanstående exempel används dock en specialfunktion, "^TO", vilken matchar på "To:", "Cc:" och andra synonymer för adressat.

Mer information om hur man skriver filter fås genom att köra 'man procmailrc'. Ett stort antal exempel på filter fås genom att köra 'man procmailex'.

Filtrering av spam

Lysators e-post ligger bakom LiU vilken tillhandahåller ett antispamfilter och lägger till en rapport i headern "X-Forefront-Antispam-Report". Headern är strukturerad som semikolonseparerade värden, precis vad dessa betyder går att läsa här, men troligtvis är det "SFV:SPM" du vill använda. Du kan ändra målkatalogen till '/dev/null' för att ta bort spammarkerade mail automatiskt.

# The X-Forefront-Antispam-Report set by Microsoft's spam filter service
# is a ;-separated list of <tag>:<value> pairs.  This header *is* set,
# regardless of if it is spam or not, so you need to look at specific
# tags.

# SCL, Spam Confidence Level: number between -1 and 9.  5 and  above
# are spam.  -1 means white-listed.
:0 :
* ^X-Forefront-Antispam-Report:.*[ ;,]SCL: *([5-9]|[1-9][0-9])
.Spam/       

# SFV values:
#  - "NSPM":  Non-spam
#  - "SPM":   Spam
#  - "SKB":   A central rule blocking e.g. sender or domain
:0 :
* ^X-Forefront-Antispam-Report:.*[ ;,]SFV: *(SPM|SKB)($|[^A-Za-z0-9_---])
.Spam/

Engångsaddresser

Lysator erbjuder en möjlighet att använda user domänen där man kan använda en e-postaddress med formatet <vad-som-helst>@<användare>.user.lysator.liu.se och ändå få mailen levererade till sin inbox. Följande recept kan användas för att automatiskt organisera dessa mail till respektive mapp.

# Engångsaddresser
:0
* ^TO_\/[a-zA-Z0-9]+@<användare>.user.lysator.liu.se
{
    # Trim domain part from captured MATCH
    :0
    * MATCH ?? ^\/[^@]+
    .INBOX."$MATCH"/
}


Procmail och Pine

E-post-klienten Pine har funktioner för att hantera flera inboxar, vilket är trevligt tillsammans med procmail. Denna funktion är från början avslagen, och sätts på genom att man i Pines inställningar markerar flaggan "enable-incoming-folders". Detta ändrar Pines "Folder List", vilken nu är uppdelad i en avdelning för inboxar och en för vanliga boxar. När man läser mail i sina inboxar kan man gå till nästa inbox genom att trycka [TAB]. Det kan vara trevligt att markera inställningen "auto-open-next-unread" för att kunna gå direkt till nästa folder utan att behöva svara "ja" varje gång.

När man använder flera inboxar i Pine är det bra att placera inboxar i ett eget directory, så att de inte dyker upp bland icke inboxar. Skapa exempelvis katalogen 'in.mail', vilken sätts som destination för procmails filter.

För att Pine skall känna till dina nya inboxar måste du addera dessa genom att trycka "A" när du står i den del av Pines "Folder List" som har rubriken "Incoming Message Folders". På den första frågan trycker du bara return, vilket anger att du har infoldern på Lysator och inte på annan server. På nästa fråga svarar du med sökvägen till den inbox-fil du vill adera, exempelvis '~/in.mail/in.test'. På sista frågan anger du vad inboxen skall heta i Pine.

Mailindikatorer för flera inboxar

Vanliga mailindikatorer som "xbiff", "coolmail" och "asmail" har inte stöd för flera inboxar. Mail som flyttas från inboxen av procmail indikeras inte. För att övervaka flera inboxar bör man därför använda program avsedda för detta, exempelvis "xmultibiff" (finns på Lysators system) och "xbuffy".

Länkar om procmail

Nedan finns ett antal länkar till mer information om procmail.

Lycka till! /pugo@lysator