Stillingsutlysning, Sieve

(Forskjell mellom sider)
Gå til: navigasjon, søk
(Søknaden)
m
Linje 1: Linje 1:
== Har du lyst til å bli terminalstuevakt? ==
+
Sieve ("sil" på engelsk og fransk) er språket e-postfilteret som brukes på '''UiOs''' e-postsystem skrives i. Det blir kjørt hver gang det kommer en ny melding.
  
Terminalstuene ved Det matematisk naturvitenskapelige fakultet og Institutt for informatikk ansetter nye terminalvakter i begynnelsen av hvert semester. Søknadsfrist er oppgitt lenger ned på denne siden. Det er ved søknadsfristens utløp vanligvis ikke klart hvor mange nye som vil bli ansatt. Informasjon om det kommer pr. e-post når behandlingen av søknadene begynner.
+
For å sette opp et Sieve-filter ved '''UiO''' gjør man slik:
  
=== Arbeidsoppgaver ===
+
*Start ''USIT'' sin emacs <tt>/local/bin/emacs</tt> og pass på at du jobber i '''UTF-8'''
  
Arbeidet går ut på å sitte vakt på en terminalstue for lavergradsstudenter '''ca. 10 timer i uken'''.  Dette omfatter daglig drift av terminalstuene samt hjelp og støtte til brukerne på stuene.  Utover dette kan det også bli aktuelt å utføre andre oppgaver for IT-drift.
+
*Start med å laste inn Sieve-bibliotekene. Det gjøres ved å taste <tt>M-x load-library</tt> og så <tt>sieve</tt>. Du får da melding om <tt>Loading sieve...done</tt>
  
=== Krav ===
+
*Kjør så <tt>M-x sieve-manage</tt>. Du blir da spurt om server, og denne finner du ved å besøke [https://www.uio.no/brukerinfo/email/ brukerinfo på verdensveven] eller <tt>email info brukernavn</tt> i bofh. For meg så er dette
+
For stillingene kreves at du er '''student ved UiO''', og '''minst ett INF-kurs''' (fortrinnsvis INF1000 eller tilsvarende). Du bør være utadvent, ha gode samarbeidsevner og en positiv innstilling til å hjelpe andre.  Videre bør du uttrykke deg godt muntlig og skriftlig.  Du bør ha kjennskap til ett eller flere av følgende OS: Windows, Linux eller andre UNIX-dialekter og bruk av deres applikasjoner. Faktorer som vil telle positivt er studieerfaring fra Universitetet i Oslo og kjennskap til bruk av IT i studiesammenheng og tidligere erfaring med IT, spesielt IT-tjenestene ved UiO. Pedagogisk kompetanse eller erfaring og kjennskap til programpakkene som brukes i de ulike kursene er en fordel men ikke et krav.
+
+
=== Arbeidssted ===
+
+
Fakultetets (MN) terminalstuer ligger i fysikkbygningen, og i Vilhelm Bjerknes hus.  IFIs (bemannede) terminalstue befinner seg i matematikkbygningen (Abel).  På stuene er det til sammen ca. 30 termvakter.
+
  
=== Søknaden ===
+
jbofh> email info martiso
   
+
  Account:          martiso
En søknad skal bestå av følgende:
+
Mail server:     cyrus03 (cyrus_IMAP)
  
* Selve søknaden
+
Altså er det <tt>cyrus03</tt> jeg skal skrive inn som server. Etter dette blir du spurt etter brukernavn og passord, og dette er det vanlige brukernavnet og passordet ved '''UiO'''. Velg så <tt>y</tt> på <tt>Store password for this session</tt>
** '''Brukernavn''' ved uio.
+
** '''e-postadresse''' (vi ser helst at du bruker uio-kontoen din, og vil kreve det i jobbsammenheng).
+
** '''Telefonnummer''' du kan kontaktes på.
+
* '''Karakterutskrift''' fra UiO (eventuelt andre høyskoler og universitet), ikke utskrift fra studweb.
+
* Eventuell '''CV''' og '''andre vedlegg'''.
+
  
Ufullstendige søknader vil bli forkastet (elektronisk søknad aksepteres ikke).
+
*Du har nå fått opp en ny meny i emacs. Den ser ca. ut som dette:
  
Søknaden bør si noe om '''hvorfor''' du vil bli terminalvakt, dine '''studieplaner''' ved UiO, hvilke '''programmer og programpakker''' du kjenner til, om du har vært '''gruppelærer''' og eventuell annen relevant erfaring. Informér også om hvor mye du eventuelt har mulighet til å jobbe og om du har andre (deltids)jobber (som da vil begrense når du kan jobbe som termvakt).
+
  Server  : cyrus03:2000
  
Konvolutten merkes '''''Termvaktjobb''''' og leveres leveres ekspedisjonen til Institutt for informatikk i 2 etg. i informatikkbygningen.
+
3 scripts on server, press RET on a script name edits it, or
 +
press RET on <new script> to create a new script.
 +
        <new script>
 +
        sievefilter2.txt<3>
 +
  ACTIVE sievefilter2.txt
 +
        phpscript
  
Du kan også sende søknaden (ustiftet, i konvolutt) med vedlegg til:
+
Hvis du har lagd filter i webmail allerede, vil dette hete <tt>phpscript</tt>. Du kan åpne det ved å trykke på enter når <tt>phpscript</tt> er markert. Hvis du har lyst til å endre filteret ditt bare litt, kan det enkleste være å redigere denne fila. Det som er viktig å legge merke til er at webmail-editoren kun leser de egenproduserte kommentarene i denne fila og presenterer disse som filteret hvis det både er kommentarer og kommandoer. Det er derfor lurt å slette disse merkelige kommentarene, ellers vil webmail presentere et filter, mens du faktisk har et annet filter.
  
Termvaktjobb
+
Hvis du ikke har et filter fra før av, vil du kun se <tt><new script></tt>. Du kan da enten velge å redigere direkte ved å trykke enter på <tt><new script></tt> eller du kan åpne en ny fil (<tt>C-x C-f filnavn.siv</tt>). Jeg synes det er tryggest å lagre på hjemmeområdet en gang i blant. Jeg tar derfor utgangspunkt i at det blir laget en fil på hjemmeområdet som heter <tt>sievefilter.siv</tt>.
Student-IT-drift
+
Institutt for informatikk
+
PB 1080 Blindern
+
0316 OSLO
+
  
'''''MERK!''''' Postgangen både til UiO og internt UiO er ganske treg til tider, så '''''det lønner seg å levere direkte''''' til ekspedisjonen ifi.
+
Hvis du har et filter du ønsker å laste opp (f.eks. <tt>sievefilter.siv</tt>) og gjøre aktivt, gjør du følgende måte: Du starter <tt>sieve-manage</tt>, og logger deg på tjeneren. Åpne fila du ønsker å laste opp på vanlig måte (<tt>C-x C-f</tt>). Trykk <tt>M-x</tt> og skriv inn <tt>sieve-upload</tt>. Filteret vil da bli testet, og hvis det er syntaktisk OK, blir det lasta opp. Hvis det er feil i skriptet, får du beskjed om det. Rett opp og last opp ny.
  
'''''MERK!''''' '''Ikke stift arkene''' sammen, bruk binders om nødvendig. Unngå også dobbeltsidige vedlegg.
+
Du har nå lasta opp filteret, men det er enda ikke gjort aktivt. For å gjøre det aktivt gå tilbake til vinduet <tt>*sieve*</tt>. Her vil det nye skriptet kanskje ikke ha dukket opp enda, men du får det fram med <tt>M-x sieve-refresh-scriptlist</tt>. Når du ser det nye skriptet ditt, marker det, og kjør <tt>M-x sieve-activate</tt>. Du har nå lasta opp og aktivert det nye skriptet, og det vil brukes hver gang det kommer nye meldinger til deg.
  
=== Søknadsfrist ===
+
*Hvordan ser så et Sieve-filter ut?
 +
Les [http://www.ietf.org/rfc/rfc3028.txt?number=3028 dokumentasjonen] eller se mitt eksempel på http://termvakt.uio.no/filer/sievefilter.txt
  
Vi ansetter i begynnelsen av hvert semester og fristene for å levere søknad er dermed de følgende:
+
Siden få gidder å lese standarden så kan jeg komme med litt info. Se først på eksempelfila, og du vil se at starten av fila ser slik ut:
  
* Søknadsfrist for '''vårsemesteret''' er '''15. januar'''.
+
  require ["fileinto","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"];
* Søknadsfrist for '''høstsemesteret''' er '''20. august'''.
+
  
Søknader som ikke er mottatt av ansettelseskomiteen innen fristen vil nødvendigvis ikke bli tatt til følge, så derfor lønner det seg som nevnt over å levere søknaden direkte til administrasjonen.
+
Denne linja brukes for å få med kommandoer man trenger, og webmail tar med alt som den kan bruke.  Egentlig klarer du deg med langt færre. Ordet <tt>require</tt> er en såkalt control structure. Andre kontrollstrukturer er <tt>if</tt> og <tt>stop</tt>.
  
Søk gjerne i god tid før dette. Intervjuer vil bli avviklet i påfølgende uke etter fristen.
+
Videre ser fila slik ut:
  
Husk å oppgi e-postadresse/telefonnummer slik at vi får gitt beskjed om tid og sted for eventuelt intervju.
+
if header :contains "X-'''UiO'''-Spam-score" "sssss"
 +
{
 +
  fileinto "INBOX.spam";
 +
  stop;
 +
}
  
=== Lønn ===
+
Den første linja er en <tt>if</tt>-test. Første argument (<tt>header</tt>) til kontrollstrukturen <tt>if</tt> er en test som sier hvor i meldingen vi skal sjekke.  En liten oversikt over mulige tester:
  
Stillingene lønnes i '''lønnstrinn 20 til 28''', per 2008-05-01 fra 128.60 til 143.80 pr. time. Nytilsatte får lønnstrinn 20, og man øker ett per semester man er ansatt.
+
:<tt>address</tt>: "address" vil tolke headerfeltene <tt>From</tt>, <tt>To</tt>, <tt>Cc</tt>, <tt>Bcc</tt>, <tt>Sender</tt>, <tt>Resent-From</tt> og <tt>Resent-To</tt> slik at vi kun står igjen med selve e-postadressene (altså hvis det i <tt>To</tt>-feltet står "termvakt <termvakt@matnat.uio.no>" vil <tt>address</tt> plukke ut "termvakt@matnat.uio.no" for å gjøre sammenligningen).
 +
:<tt>allof</tt>: Logisk AND, forklart nedenfor
 +
:<tt>anyof</tt>: Logisk OR, forklart nedenfor
 +
:<tt>envelope</tt>: Sjekker adressen som står utenpå konvolutten, denne kan være helt forskjellig fra det som står i To og From-feltet i selve meldingen.  Dessverre blir f.eks. "martin.sollien" skrevet om til brukernavnet "martiso" på vegen gjennom e-postsystemet, men bortsett fra dette er konvoluttadressen uforandret. Adressen i <tt>To</tt> blir alltid skrevet om til din offisielle adresse, så hvis du ønsker å sortere ut e-post sendt til dine gamle adresser, må du bruke <tt>envelope</tt>. Krever <tt>require "envelope"</tt>.
 +
:<tt>exists</tt>: Sjekker om headeren er finnes i meldingen. Et lite eksempel som vil kaste meldinger som ikke har definert avsender: <tt>if not exists "From" { discard; }</tt>
 +
:<tt>header</tt>: Angir at vi skal teste en header for innhold.
 +
:<tt>not</tt>: Logisk NOT, tar en av de andre testene som argument og inverterer resultatet.
 +
:<tt>size</tt>: Tester på størrelsen til mailen. De to argumentene den kan ha er <tt>:over</tt> og <tt>:under</tt>. Kan bruke bokstavene <tt>K</tt> (=2^10), <tt>M</tt> (=2^20) og <tt>G</tt> (=2^30) for å angi størrelse, f.eks. <TT>4M</TT>. For eksempel se i '''RFC3028'''.
  
=== Vaktfordeling ===
 
  
Fordeling av vakter skjer i begynnelsen av hvert semester og ingen kan arbeide mer enn 14 timer per uke.
+
Det andre argumentet, "<tt>:contains</tt>" er et tagged argument. I dette tilfellet sier det hvordan <tt>if</tt>-testen skal teste. De fem sammenligningsmåtene man kan bruke er:
  
=== Engasjementets varighet ===
+
:<tt>''':contains'''</tt>: Returnerer sant hvis teststrengen finnes i den angitte headeren (altså om teststrengen er en delstreng av headeren).
 +
:<tt>''':is'''</tt>: Returnerer sant hvis teststrengen og headeren er like.
 +
:<tt>''':matches'''</tt>: Kan lage søkestrenger som inneholder vilkårlig tegn (wildcards). Et lite eksempel er <tt>if header :matches ["*viagra*", "*make*money*fast*"]</tt>. Det to jokertegnene er '?' og '*'. '?' tilsvarer ett tilfeldig tegn, mens '*' angir null eller flere tilfeldige tegn.  Hvis du skriver "Re:*", så må strengen starte med "Re:", mens "*Re:*" vil være sann uansett hvor "Re:" står i strengen.
 +
:<tt>''':value'''</tt>: Tester på numeriske verdier, f.eks. tall i subject.  Krever <tt>require "relational"</tt>.
 +
:<tt>''':regex'''</tt>: Hvis du ønsker å bruke regulære uttrykk, er dette tingen å bruke. Siden jeg ikke kan dette, kan jeg ikke utdype dette nærmere.  Krever <tt>require "regex"</tt>.
  
Ny arbeidskontrakt skrives hvert semester etter vurdering av engasjementet.  Engasjementet om våren varer fra 1. februar til 31. august og om høsten fra 1. september til 31. januar.  Bortsett fra universitetets ferier, kan man ikke ha lengre planlagte fravær i engasjementsperioden.
+
Hvis man bruker <tt>:contains</tt>, <tt>:is</tt>, <tt>:matches</tt> eller <tt>:regex</tt>, er det neste argumentet hvilken header man skal søke i, mens det etter det igjen angir teststrengen.  
  
=== Kontaktpunkt ===
+
Det siste argumentet (det som er innafor {} ) er hva som skal skje hvis testen returnerer sant. Her kan man gjøre følgende:
+
Spørsmål kan rettes til termvaktene, eller til
+
  
  Peder Stray
+
:<tt>reject "tekst"</tt>: Meldingen tas ikke i mot, og sendes tilbake til avsender. "Tekst" er det du vil at avsender skal få av feilmelding. Vær forsiktig med denne, da avsenderadressen kan være forfalsket, og da vil du plage en uskyldig tredjepart.
Tlf. 22840172
+
:<tt>fileinto "mappe"</tt>: Flytter meldingen til den angitte mappa. Om du gjør flere <tt>fileinto</tt> til samme mappe, vil du likevel bare få ett eksemplar. Krever <tt>require "fileinto"</tt>.
  [mailto:drift@ifi.uio.no drift@ifi.uio.no]
+
:<tt>redirect "adresse"</tt>: Videresender meldingen til "adresse".
 +
:<tt>keep</tt>: Den legger meldingen i <TT>INBOX</TT>. Dette er standard på alle meldingene som kommer hvis ingen annen hendelse blir gjort.
 +
:<tt>discard</tt>: Kaster meldingen.
 +
:<tt>notify</tt>: Varsler om at det har kommet ny e-post via f.eks. SMS. Har for tiden ingen effekt ved '''UiO'''. Krever <tt>require "notify"</tt>.
 +
:<tt>vacation</tt>: Sender en melding til avsender om at du er utilgjengelig el.l. For de fleste er det bedre å bruke Automatisk svar i '''UiO'''-innstillinger i webmail, men hvis du vil ha mer finkornet kontroll, kan du gjøre det her. Se advarsel om <tt>reject</tt>.  Krever <tt>require "vacation"</tt>.
  
[[Category:Termstue]]
+
I tillegg så kan man legge inn kontrollstrukturordet <tt>stop</tt> her. Filteret vil da stoppe, og ikke gjøre de resterende testene.
[[Category:Formelt]]
+
 
 +
 
 +
Så kan vi gjøre det litt mer avansert. Vi har to ord som implementerer logisk AND og OR. Disse er <tt>allof</tt> og <tt>anyof</tt>. To eksempler ser du nedenfor:
 +
 
 +
# Denne testen flytter alle termvaktmail til termvakt-folderen. STOPPER IKKE
 +
if anyof (
 +
  header :contains ["to", "cc"] "termvakt@matnat.uio.no",
 +
  header :contains ["to", "cc"] "lk-alle@usit.uio.no",
 +
  header :contains ["to", "cc"] "stueansvarlige@matnat.uio.no",
 +
  header :contains ["to", "cc"] "termvakt@ifi.uio.no",
 +
  header :contains ["to", "cc"] "termvakter@ifi.uio.no")
 +
{
 +
  fileinto "INBOX.termvakt";
 +
}
 +
 
 +
# Denne testen flytter meldinger som ser ut som spam til bofh.no til spam-folderen
 +
if allof (
 +
  header :contains ["to", "cc"] "@bofh.no",
 +
  header :contains ["subject"] "viagra")
 +
{
 +
  fileinto "INBOX.spam";
 +
  stop;
 +
}
 +
 
 +
I tillegg så finnes operatoren <tt>not</tt>. Den virker som en logisk NOT og inverterer sannhetsverdien av et uttrykk. Et lite eksempel på det:
 +
 
 +
if not header :contains ["to", "cc"] "viagra"
 +
{
 +
  keep;
 +
}
 +
 
 +
Når det gjelder kommentarer, så skrives de enten med # og da blir resten av linja kommentert ut, eller så kan man bruke /* */ og alt som står mellom de to sekvensene blir kommentert vekk.
 +
 
 +
En ting som er viktig å merke seg er det som kalles "String Lists". "String Lists" oppgis inne i '[' og ']' og elementene skilles med ','. Evalueringen er slik at dersom testen er sann med ett eller flere av elementene i listen, så er hele uttrykket sant. Det er brukt flere ganger i eksemplene over, men et lite forklarende eksempel til:
 +
 
 +
if header :contains ["to", "cc"] ["termvakt@matnat.uio.no", "termvakt@ifi.uio.no"]
 +
 
 +
er det samme som
 +
 
 +
if anyof (
 +
  header : contains "to" "termvakt@matnat.uio.no"
 +
  header : contains "cc" "termvakt@matnat.uio.no"
 +
  header : contains "to" "termvakt@ifi.uio.no"
 +
  header : contains "cc" "termvakt@ifi.uio.no")
 +
 
 +
Det er også viktig å merke seg at ingenting i Sieve skiller mellom store og små bokstaver, heller ikke strengene. Man kan gjøre slik at strengene blir case-sensitive, og det gjøres med å skrive <tt>:comparator "i;octet"</tt> etter f.eks <tt>:contains</tt>. Et lite eksempel:
 +
 
 +
if header :contains :comparator "i;octet" "Subject" "MAKE MONEY FAST"
 +
{
 +
  discard;
 +
}
 +
Denne testen vil kaste alle meldinger som har emnefelt som "this is a great way to MAKE MONEY FAST", mens den vil ikke slå til på "this is a great way to make money fast".
 +
 
 +
Så kan vi gjøre ting enda mer avansert. Vi har allerede sett at vi har <tt>if</tt> som test, men vi har også <tt>elsif</tt> og <tt>else</tt>. Et lite eksempel:
 +
 
 +
if header :is "Sender" "no@rart.no"
 +
{
 +
  fileinto "INBOX.rart"; 
 +
}
 +
elsif address :domain :is ["From", "To"] "uio.no"
 +
{
 +
  fileinto "INBOX.uio";
 +
}
 +
else
 +
{
 +
  keep;
 +
}
 +
 
 +
I denne testen har er det en annen ny ting også, nemlig <tt>:domain</tt>. Siden vi jobber med e-post, har vi ofte behov for å få tak i det som er til venstre for @ og det som er til høyre for @. Det som er til venstre kan kan få tak i ved å legge til <tt>:localpart</tt>, mens hvis man skal ha tak i det til høyre (domenet) skriver man bare @@:domain@. Hvis man trenger hele e-postadressen, kan man skrive <tt>:all</tt>.  Dette fungerer for <tt>address</tt> og <tt>envelope</tt>.  Hvis du er plaget med at du får mye spam til adresser du ikke bruker, kan du f.eks. skrive:
 +
 
 +
if envelope :domain "To" ["hfstud.uio.no", "ernst.uio.no", "www.ifi.uio.no"]
 +
{
 +
  discard;
 +
}
 +
 
 +
Siden konvoluttmottaker alltid vil være en av dine gyldige adresser, er det tilstrekkelig å sjekke domenedelen.
 +
 
 +
 
 +
== Eksterne linker ==
 +
*For oppklarende info, sjekk [http://www.ietf.org/rfc/rfc3028.txt?number=3028]
 +
 
 +
[[Category:Programvare]]
 +
[[Category:Internett]]

Revisjonen fra 23. jul 2010 kl. 11:54

Sieve ("sil" på engelsk og fransk) er språket e-postfilteret som brukes på UiOs e-postsystem skrives i. Det blir kjørt hver gang det kommer en ny melding.

For å sette opp et Sieve-filter ved UiO gjør man slik:

  • Start USIT sin emacs /local/bin/emacs og pass på at du jobber i UTF-8
  • Start med å laste inn Sieve-bibliotekene. Det gjøres ved å taste M-x load-library og så sieve. Du får da melding om Loading sieve...done
  • Kjør så M-x sieve-manage. Du blir da spurt om server, og denne finner du ved å besøke brukerinfo på verdensveven eller email info brukernavn i bofh. For meg så er dette
jbofh> email info martiso
Account:          martiso
Mail server:      cyrus03 (cyrus_IMAP)

Altså er det cyrus03 jeg skal skrive inn som server. Etter dette blir du spurt etter brukernavn og passord, og dette er det vanlige brukernavnet og passordet ved UiO. Velg så yStore password for this session

  • Du har nå fått opp en ny meny i emacs. Den ser ca. ut som dette:
Server  : cyrus03:2000
3 scripts on server, press RET on a script name edits it, or
press RET on <new script> to create a new script.
        <new script>
        sievefilter2.txt<3>
 ACTIVE sievefilter2.txt
        phpscript

Hvis du har lagd filter i webmail allerede, vil dette hete phpscript. Du kan åpne det ved å trykke på enter når phpscript er markert. Hvis du har lyst til å endre filteret ditt bare litt, kan det enkleste være å redigere denne fila. Det som er viktig å legge merke til er at webmail-editoren kun leser de egenproduserte kommentarene i denne fila og presenterer disse som filteret hvis det både er kommentarer og kommandoer. Det er derfor lurt å slette disse merkelige kommentarene, ellers vil webmail presentere et filter, mens du faktisk har et annet filter.

Hvis du ikke har et filter fra før av, vil du kun se <new script>. Du kan da enten velge å redigere direkte ved å trykke enter på <new script> eller du kan åpne en ny fil (C-x C-f filnavn.siv). Jeg synes det er tryggest å lagre på hjemmeområdet en gang i blant. Jeg tar derfor utgangspunkt i at det blir laget en fil på hjemmeområdet som heter sievefilter.siv.

Hvis du har et filter du ønsker å laste opp (f.eks. sievefilter.siv) og gjøre aktivt, gjør du på følgende måte: Du starter sieve-manage, og logger deg på tjeneren. Åpne fila du ønsker å laste opp på vanlig måte (C-x C-f). Trykk M-x og skriv inn sieve-upload. Filteret vil da bli testet, og hvis det er syntaktisk OK, blir det lasta opp. Hvis det er feil i skriptet, får du beskjed om det. Rett opp og last opp på ny.

Du har nå lasta opp filteret, men det er enda ikke gjort aktivt. For å gjøre det aktivt gå tilbake til vinduet *sieve*. Her vil det nye skriptet kanskje ikke ha dukket opp enda, men du får det fram med M-x sieve-refresh-scriptlist. Når du ser det nye skriptet ditt, marker det, og kjør M-x sieve-activate. Du har nå lasta opp og aktivert det nye skriptet, og det vil brukes hver gang det kommer nye meldinger til deg.

  • Hvordan ser så et Sieve-filter ut?

Les dokumentasjonen eller se mitt eksempel på http://termvakt.uio.no/filer/sievefilter.txt

Siden få gidder å lese standarden så kan jeg komme med litt info. Se først på eksempelfila, og du vil se at starten av fila ser slik ut:

 require ["fileinto","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"]; 

Denne linja brukes for å få med kommandoer man trenger, og webmail tar med alt som den kan bruke. Egentlig klarer du deg med langt færre. Ordet require er en såkalt control structure. Andre kontrollstrukturer er if og stop.

Videre ser fila slik ut:

if header :contains "X-UiO-Spam-score" "sssss" 
{
  fileinto "INBOX.spam";
  stop;
}

Den første linja er en if-test. Første argument (header) til kontrollstrukturen if er en test som sier hvor i meldingen vi skal sjekke. En liten oversikt over mulige tester:

address: "address" vil tolke headerfeltene From, To, Cc, Bcc, Sender, Resent-From og Resent-To slik at vi kun står igjen med selve e-postadressene (altså hvis det i To-feltet står "termvakt <termvakt@matnat.uio.no>" vil address plukke ut "termvakt@matnat.uio.no" for å gjøre sammenligningen).
allof: Logisk AND, forklart nedenfor
anyof: Logisk OR, forklart nedenfor
envelope: Sjekker adressen som står utenpå konvolutten, denne kan være helt forskjellig fra det som står i To og From-feltet i selve meldingen. Dessverre blir f.eks. "martin.sollien" skrevet om til brukernavnet "martiso" på vegen gjennom e-postsystemet, men bortsett fra dette er konvoluttadressen uforandret. Adressen i To blir alltid skrevet om til din offisielle adresse, så hvis du ønsker å sortere ut e-post sendt til dine gamle adresser, må du bruke envelope. Krever require "envelope".
exists: Sjekker om headeren er finnes i meldingen. Et lite eksempel som vil kaste meldinger som ikke har definert avsender: if not exists "From" { discard; }
header: Angir at vi skal teste en header for innhold.
not: Logisk NOT, tar en av de andre testene som argument og inverterer resultatet.
size: Tester på størrelsen til mailen. De to argumentene den kan ha er :over og :under. Kan bruke bokstavene K (=2^10), M (=2^20) og G (=2^30) for å angi størrelse, f.eks. 4M. For eksempel se i RFC3028.


Det andre argumentet, ":contains" er et tagged argument. I dette tilfellet sier det hvordan if-testen skal teste. De fem sammenligningsmåtene man kan bruke er:

:contains: Returnerer sant hvis teststrengen finnes i den angitte headeren (altså om teststrengen er en delstreng av headeren).
:is: Returnerer sant hvis teststrengen og headeren er like.
:matches: Kan lage søkestrenger som inneholder vilkårlig tegn (wildcards). Et lite eksempel er if header :matches ["*viagra*", "*make*money*fast*"]. Det to jokertegnene er '?' og '*'. '?' tilsvarer ett tilfeldig tegn, mens '*' angir null eller flere tilfeldige tegn. Hvis du skriver "Re:*", så må strengen starte med "Re:", mens "*Re:*" vil være sann uansett hvor "Re:" står i strengen.
:value: Tester på numeriske verdier, f.eks. tall i subject. Krever require "relational".
:regex: Hvis du ønsker å bruke regulære uttrykk, er dette tingen å bruke. Siden jeg ikke kan dette, kan jeg ikke utdype dette nærmere. Krever require "regex".

Hvis man bruker :contains, :is, :matches eller :regex, er det neste argumentet hvilken header man skal søke i, mens det etter det igjen angir teststrengen.

Det siste argumentet (det som er innafor {} ) er hva som skal skje hvis testen returnerer sant. Her kan man gjøre følgende:

reject "tekst": Meldingen tas ikke i mot, og sendes tilbake til avsender. "Tekst" er det du vil at avsender skal få av feilmelding. Vær forsiktig med denne, da avsenderadressen kan være forfalsket, og da vil du plage en uskyldig tredjepart.
fileinto "mappe": Flytter meldingen til den angitte mappa. Om du gjør flere fileinto til samme mappe, vil du likevel bare få ett eksemplar. Krever require "fileinto".
redirect "adresse": Videresender meldingen til "adresse".
keep: Den legger meldingen i INBOX. Dette er standard på alle meldingene som kommer hvis ingen annen hendelse blir gjort.
discard: Kaster meldingen.
notify: Varsler om at det har kommet ny e-post via f.eks. SMS. Har for tiden ingen effekt ved UiO. Krever require "notify".
vacation: Sender en melding til avsender om at du er utilgjengelig el.l. For de fleste er det bedre å bruke Automatisk svar i UiO-innstillinger i webmail, men hvis du vil ha mer finkornet kontroll, kan du gjøre det her. Se advarsel om reject. Krever require "vacation".

I tillegg så kan man legge inn kontrollstrukturordet stop her. Filteret vil da stoppe, og ikke gjøre de resterende testene.


Så kan vi gjøre det litt mer avansert. Vi har to ord som implementerer logisk AND og OR. Disse er allof og anyof. To eksempler ser du nedenfor:

# Denne testen flytter alle termvaktmail til termvakt-folderen. STOPPER IKKE
if anyof (
  header :contains ["to", "cc"] "termvakt@matnat.uio.no",
  header :contains ["to", "cc"] "lk-alle@usit.uio.no",
  header :contains ["to", "cc"] "stueansvarlige@matnat.uio.no",
  header :contains ["to", "cc"] "termvakt@ifi.uio.no",
  header :contains ["to", "cc"] "termvakter@ifi.uio.no")
{
  fileinto "INBOX.termvakt";
}
# Denne testen flytter meldinger som ser ut som spam til bofh.no til spam-folderen
if allof (
  header :contains ["to", "cc"] "@bofh.no",
  header :contains ["subject"] "viagra")
{
  fileinto "INBOX.spam";
  stop;
}

I tillegg så finnes operatoren not. Den virker som en logisk NOT og inverterer sannhetsverdien av et uttrykk. Et lite eksempel på det:

if not header :contains ["to", "cc"] "viagra" 
{ 
  keep;
}

Når det gjelder kommentarer, så skrives de enten med # og da blir resten av linja kommentert ut, eller så kan man bruke /* */ og alt som står mellom de to sekvensene blir kommentert vekk.

En ting som er viktig å merke seg er det som kalles "String Lists". "String Lists" oppgis inne i '[' og ']' og elementene skilles med ','. Evalueringen er slik at dersom testen er sann med ett eller flere av elementene i listen, så er hele uttrykket sant. Det er brukt flere ganger i eksemplene over, men et lite forklarende eksempel til:

if header :contains ["to", "cc"] ["termvakt@matnat.uio.no", "termvakt@ifi.uio.no"]

er det samme som

if anyof (
  header : contains "to" "termvakt@matnat.uio.no"
  header : contains "cc" "termvakt@matnat.uio.no"
  header : contains "to" "termvakt@ifi.uio.no"
  header : contains "cc" "termvakt@ifi.uio.no")

Det er også viktig å merke seg at ingenting i Sieve skiller mellom store og små bokstaver, heller ikke strengene. Man kan gjøre slik at strengene blir case-sensitive, og det gjøres med å skrive :comparator "i;octet" etter f.eks :contains. Et lite eksempel:

if header :contains :comparator "i;octet" "Subject" "MAKE MONEY FAST" 
{
  discard;
}

Denne testen vil kaste alle meldinger som har emnefelt som "this is a great way to MAKE MONEY FAST", mens den vil ikke slå til på "this is a great way to make money fast".

Så kan vi gjøre ting enda mer avansert. Vi har allerede sett at vi har if som test, men vi har også elsif og else. Et lite eksempel:

if header :is "Sender" "no@rart.no"
{
  fileinto "INBOX.rart";  
}
elsif address :domain :is ["From", "To"] "uio.no"
{
  fileinto "INBOX.uio";
}
else
{
  keep;
}

I denne testen har er det en annen ny ting også, nemlig :domain. Siden vi jobber med e-post, har vi ofte behov for å få tak i det som er til venstre for @ og det som er til høyre for @. Det som er til venstre kan kan få tak i ved å legge til :localpart, mens hvis man skal ha tak i det til høyre (domenet) skriver man bare @@:domain@. Hvis man trenger hele e-postadressen, kan man skrive :all. Dette fungerer for address og envelope. Hvis du er plaget med at du får mye spam til adresser du ikke bruker, kan du f.eks. skrive:

if envelope :domain "To" ["hfstud.uio.no", "ernst.uio.no", "www.ifi.uio.no"]
{
 discard;
}

Siden konvoluttmottaker alltid vil være en av dine gyldige adresser, er det tilstrekkelig å sjekke domenedelen.


Eksterne linker

  • For oppklarende info, sjekk [1]
Personlige verktøy
Navnerom
Varianter
Handlinger
Navigasjon
Kategorier
Programvare
Andre
Translate
Verktøy