Het werkt
De drempel was misschien nogal hoog om met procmail te werken. Misschien dat dit kan helpen voor anderen, om zo samen nog meer te kunnen uitvissen.
De volgende uitleg is gebaseerd op mijn ervaringen met procmail. Tzal waarschijnlijk niet allemaal 100% juist of efficiënt zijn, maar tis een begin. Comment is altijd welkom é, tkan er maar op verbeteren. Ik heb alles uit meerdere tutorials en faqs gehaald van het net.
Misschien best eerst eens helemaal doorlezen...
Ik denk dat den truuk is dat je alle mail die je wil verwerken eerst moet doorspelen aan je
snXXXX@scoutet.be adres, want dit is -volgens mij- de enige die door procmail verwerkt kan worden.
Ik zal in het vervolg sn0601 (de testaccount) als voorbeeld gebruiken, dus telkens als je die tegenkomt pas je die aan naar uw account.
Ik had een .forward file staan met daain mijn eigen adres, dus alle mail naar
sn0601@scoutnet.be werd doorgezonden naar mijn @telenet.be adres. Dit terzijde
Eerst maak je een direcory
.procmail en een directory
mail aan in je home root, we komen hier later nog op terug
dan maak je, terug in je home root, een file
.procmailrc aan, met daarin:
Code:
VERBOSE=off
MAILDIR=$HOME/mail
PMDIR=$HOME/.procmail
DEFAULT=/var/spool/mail/sn0601
LOGFILE=$PMDIR/log
INCLUDERC=$PMDIR/test.rc
# INCLUDERC=$PMDIR/other.rc
# add as many INCLUDERC's as you like
# end of .procmailrc
Let op: file met een . => onzichtbaar...
Het spreekt voor zich dat je sn0601 vervangt door jouw login (snxxxx)
De MAILDIR is om mails ea. in op te slaan.
Je kan de verbose op on zetten als je alles aan het uittesten bent, maar je zal wel zien, dit komt snel een grote file, zet je dan best weer op
off als alles draait zoals het moet.
Nu pakken we de
.forward file aan, die staat normaal ook in je homedir, zoniet, maak er dan een aan. Als er momenteel een adres instaat waarnaar er moet geforward worden (zoals bij mij), niet erg, we fixen dat later wel.
Zet er nu de volgende lijn in: (mét “ tekens)
Code:
"|IFS=' ' && exec /usr/bin/procmail || exit 75 #sn0601"
terug sn0601 naar jouw snxxxx vervangen
Waar staan we nu al?
Wanneer er mail is naar
sn0601@scoutnet.be zoekt ie naar die .forward file. Waar er vroeger misschien gewoon jouw e-mailadres stond, staat er nu een regelke dat zegt dat hij de mail eerst met procmail moet verwerken.
Dan gaat hij -denk ik- op zoek naar .procmailrc file in jouw homedir. Aha, ideaal, want die hebben we zojuist aangemaakt
Allemaal goed en wel, maar waar zet ik nu die filters en zo?
Wel, dit neemt INCLUDERC=$PMDIR/test.rc voor zijn rekening. In uw .procmail directory kan je files zetten à la test.rc. Je kan er een heleboel onder elkaar zetten, of gewoon alles in 1 rc file zetten.
Die (laten we ze maar filters noemen) filters hebben min of meer de volgende structuur:
Code:
:0
* ^From.*test@testen\.be
test
deze filter zal alle mail wat van
test@testen.be komt wegschrijven in (onze opgegeven) mail map. De file heet test.
dus:
:0
* voorwaarde (met reg-expressions)
wat-doe-je-er-mee
Je kan meerdere filters onder elkaar zetten, maar -ik denk dat- wanneer hij 1 gevonden heeft dat klopt met de voorwaarde, hij stopt met de rest te onderzoeken.
* Hmm, misschien gaat hij wel nog door met andere .rc files te checken? donno *
Maar laten we het reëel houden, we zaten nog met het feit dat het adres in m'n .forward file de mails moet ontvangen van
sn0601@scounet.be. Wel we kunnen hiervoor een filter schrijven die alle mail naar
sn0601@scounet.be forward naar mijn adres:
Code:
:0
* ^To.*sn0601@scoutnet\.be
! uw.adres@hier.be
Een ! Staat voor een forward, en een | staat voor een commando uitvoeren (zie verder)
Merk ook de \ op, dat is om de . te kunnen escapen, want in reguliere expressies wil dit zeggen: “gelijk welk een karakter” Er zijn tutorials die zeggen dat je dit niet zo belangrijk is, maar we spelen beter op safe.
Ik heb ook al gemerkt dat het voor een forward adres niet nodig is, twerkt zelf niet. (tis dan ook geen reg-ex)
Waar staan we momenteel?
Wel alle mail naar
sn0601@scoutnet.be wordt geforward naar mijn adres.
Joepie...
Maar we willen meer, volledige controle op al onze adressen!
Wel, we hebben nog iets over ivm. e-mail waar we nog niet zijn aangekomen: de emailaliases file.
Hierin staat telkens:
adres fwdadres/lijst
bv:
Code:
lijst@testaccount.scoutnet.be sn0601_01
sn0601_01 is een e-mail lijst, met bijvoorbeeld de adressen van de welpenleiding in.
Hiervan maken we:
Code:
lijst@testaccount.scoutnet.be sn0601@scoutnet.be
Wanneer men nu naar lijst@.. een mailke stuurt, komt dat toe bij
sn0601@scoutnet.be Dankszij onze procmail instelling kunnen we deze mail nu onderscheppen en/of gewoon doorsturen naar de juiste lijst. We zetten daarvoor nog een filter in onze .rc file:
Code:
:0
* ^To.*lijst@testaccount\.be
! sn0601_01@scoutnet.be
Met ^To.* kan je dus kijken voor wie de mail is. (^Subject.* geeft onderwerp)
Dan sturen we hem gewoon door naar de e-maillijst
Ziezo, In feite kan je nu gewoon alles door je .rc script laten afhandelen, en kan je in uw emailaliasses zetten:
Code:
@testaccount.scoutnet.be sn0106@scoutnet.be
Op deze manier sleur je alles door uw procmail.
Dan moet je voor al uw lijsten die in emailaliases stonden een forward filter schrijven naar het adres dat er bij stond.
Om dan toch nog de onbestaande adressen ergens toe te laten komen zet je hélemaal onderaan:
Code:
:0
!een.email@adres.ke
Wil je geen controle houden op bepaalde adressen, dan laat je ze gewoon in de emailaliasses staan.
Nu, wat ik wilde doen was a) blocken van afzenders en b) email verkeer loggen.
Met het blocken zat ik met een probleemke, stel (stel dus) dak ik 100 adressen zou willen blocken, of 'slechts' 100 adressen gebruik laten maken van een maillijst, (aha, we hadden ons vroeger al eens afgevraagd of dit kon, ja dus
) ik zou nogal wat werk hebben om ze allemaal in te geven. En om het te laten automatiseren zou het al helemaal een soepke worden.
De oplossing hiervoor is de betreffende adressen uit een externe file halen. Hoe ik het precies moet doen weet ik nog niet, maar ik denk dat dit me wel kan helpen:
Code:
# The file $MAILDIR/addresses.txt contains the recipients, one per line
:0
* ^Subject: result from cgi-bin/www-feedback$
! `cat addresses.txt`
# ^ Make sure those ^ are backticks, BTW (ASCII 96)
(hmmm, dit heeft verdacht veel mee van eigen email-lijsten aanmaken... maar soit, we hebben er al 30)
Wat ik wel al voor mekaar heb gekregen is het loggen van de e-mails!
Met het | teken kan je dus commando's uitvoeren in de shell. Wie een beetje linux-ervaring heeft weet dat je met
Code:
echo “hiephoi” >>logfile
de tekst
hiephoi in het bestand logfile wegschrijft. (>> voegt er bij)
Dit is dus bruikbaar om te loggen, maar met hiephoi zijn we niet veel, we willen tijd, afzender, bestemmeling en onderwerp loggen.
Hiervoor kunnen we 'formail' gebruiken dit is zoiets als de headers ophalen van je bericht.
Code:
SUBJECT=`formail -zxSubject:`
Steekt het onderwerp in de subject variabele, die je kan oproepen met $SUBJECT. Na enig zoeken kreeg ik alles wat ik wilde in variabelen en kon ik outputten. Ik heb -voor het gamak later- een csv bestand genomen als output. Maar wel een § teken genomen als seperator, want -de meer gebruikelijke- ; komt wel meer voor als men naar meerdere adressen in 1 keer stuurt...
Code:
SUBJECT=`formail -zxSubject:`
FROM=`formail -zxFrom:`
CC=`formail -zxCc:`
TO=`formail -zxTo:`
DATE=`formail -zxDate:`
:0c
| echo $DATE"§"$SUBJECT"§"$FROM"§"$TO"§"$CC>>../public_html/leiding/maillog.csv
Als je na >> gewoon iets zet komt het in de MAILDIR map terecht die we eerder hebben opgegeven.
Nu wil ik dus alles loggen én daarnaast doorsturen of blocken,
Oeie, 2 dingen, als het met de voorwaarde klopte stopte hij toch? Jep, maar gelukkig kunnen we nesten. Dat maakt dat mijn finaal .rc bestand er zo uit ziet:
Code:
SUBJECT=`formail -zxSubject:`
FROM=`formail -zxFrom:`
CC=`formail -zxCc:`
TO=`formail -zxTo:`
DATE=`formail -zxDate:`
:0c
| echo $DATE"§"$SUBJECT"§"$FROM"§"$TO"§"$CC>>../public_html/leiding/maillog.csv
{
:0
* ^To.*lijst@testaccount\.be
! sn0106_01@scoutnet.be
:0
* ^To.*sn0106@scoutnet\.be
! ikke@mijn.adres
:0
! ikke@mijn.adres
}
Bemerk de
:0c
Zonder die c na de nul kreeg ik miserie, al hoeft die er niet staan volgens sommige tutorials. De c geeft een copy door naar onderliggende filters
Huppe, ik denk dat ik bij deze zowat alles getoond heb wat ik er in de afgelopen dag(en) van heb opgestoken.
Ik hoop dat dit een goeie voorzet is om de geïnteresseerden op weg te helpen.
En vergeet niet: google is your friend! (procmail tutorial) en de man pages zijn ook ideaal! (man procmailex, man procmailrc)