Ενότητα 6 · 6.1
Πώς λειτουργούν τα φίλτρα
Ενότητα 6: Αυτόματα: φίλτρα και απουσία · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να εξηγήσετε πού και πότε εκτελούνται τα φίλτρα, να διαβάσετε ένα script φίλτρων σε Sieve και να προβλέψετε σε ποιον φάκελο θα καταλήξει ένα εισερχόμενο μήνυμα.
Βασικές έννοιες: φίλτρο, Sieve, ManageSieve, σετ φίλτρων, κανόνας, συνθήκη, ενέργεια, σιωπηρή διατήρηση (implicit keep), stop, περιέχει, είναι ίσο με, ταιριάζει με την έκφραση
Τα φίλτρα εκτελούνται στον server
Ένα φίλτρο ταξινομεί αυτόματα την αλληλογραφία σας: μηνύματα με τη λέξη "factuur" (τιμολόγιο) στο θέμα πηγαίνουν στον φάκελο Facturen (Τιμολόγια), τα newsletter σε δικό τους φάκελο. Το σημαντικότερο που πρέπει να γνωρίζετε: η ταξινόμηση δεν γίνεται στο webmail, αλλά στον mail server, τη στιγμή που ένα μήνυμα παραδίδεται στο γραμματοκιβώτιό σας.
Από αυτό προκύπτουν τρία πράγματα:
- Τα φίλτρα λειτουργούν και όταν το webmail είναι κλειστό. Ο φορητός σας υπολογιστής μπορεί να είναι κλειστός. Το τηλέφωνο βλέπει αμέσως το μήνυμα στον σωστό φάκελο.
- Τα φίλτρα λειτουργούν μόνο σε νέα μηνύματα. Τα μηνύματα που βρίσκονται ήδη στο γραμματοκιβώτιό σας μένουν εκεί που είναι. Αν δημιουργήσετε σήμερα ένα φίλτρο, τα παλιά μηνύματα τα μετακινείτε μόνοι σας.
- Τα φίλτρα ισχύουν για ένα γραμματοκιβώτιο. Κάθε γραμματοκιβώτιο έχει τα δικά του φίλτρα. Αν θέλετε να ρυθμίσετε κάτι για όλα τα γραμματοκιβώτια του domain σας, για παράδειγμα να μπλοκάρετε έναν αποστολέα, το κάνετε στον πίνακα διαχείρισης της hosting σας.
Τα φίλτρα είναι γραμμένα σε Sieve, μια απλή γλώσσα ειδικά για το φιλτράρισμα email (RFC 5228). Ο mail server της WebOké χρησιμοποιεί το Dovecot με το Pigeonhole, την υλοποίηση Sieve του Dovecot. Το webmail μετατρέπει τις επιλογές σας στη φόρμα σε ένα script Sieve και το στέλνει στον server μέσω του πρωτοκόλλου ManageSieve (RFC 5804). Δεν χρειάζεται να γράψετε Sieve, αλλά όποιος μπορεί να το διαβάσει καταλαβαίνει ακριβώς τι κάνουν τα φίλτρα του.
Σετ φίλτρων, κανόνες, συνθήκες και ενέργειες
Ένα σετ φίλτρων είναι ολόκληρο το script: όλα τα φίλτρα του γραμματοκιβωτίου σας σε ένα αρχείο. Μπορείτε να έχετε περισσότερα σετ φίλτρων, αλλά μόνο ένα είναι κάθε φορά ενεργό.
Μέσα στο σετ φίλτρων βρίσκονται τα φίλτρα, που στο webmail ονομάζονται και κανόνες. Κάθε φίλτρο έχει:
- ένα όνομα, μόνο για εσάς·
- ένα εύρος αναζήτησης: το μήνυμα πρέπει να ικανοποιεί όλους τους κανόνες, έναν από τους κανόνες, ή το φίλτρο ισχύει για όλα τα μηνύματα·
- μία ή περισσότερες συνθήκες: πού κοιτάζει το φίλτρο (θέμα, αποστολέας, άλλη κεφαλίδα), πώς συγκρίνει και με ποιο κείμενο·
- μία ή περισσότερες ενέργειες: τι συμβαίνει όταν ισχύουν οι συνθήκες.
Για τη σύγκριση υπάρχουν τρεις τρόποι:
| Στο webmail | Σε Sieve | Σημασία |
|---|---|---|
| περιέχει | :contains | το κείμενο βρίσκεται κάπου στην κεφαλίδα |
| είναι ίσο με | :is | η κεφαλίδα είναι ακριβώς αυτό το κείμενο |
| ταιριάζει με την έκφραση | :matches | μοτίβο με * (κανένας ή περισσότεροι χαρακτήρες) και ? (ακριβώς ένας χαρακτήρας) |
Τα κεφαλαία γράμματα δεν παίζουν ρόλο σε κανέναν από τους τρεις τρόπους. Η Sieve συγκρίνει από προεπιλογή με τον κανόνα i;ascii-casemap, που αντιμετωπίζει τα κεφαλαία και τα πεζά γράμματα ως ίδια. Έτσι το "factuur" βρίσκει και το "FACTUUR" και το "Factuur".
Πώς μοιάζει ένα σετ φίλτρων
Στο webmail μπορείτε να δείτε το σετ φίλτρων ως κείμενο μέσω Φίλτρα > Ενέργειες > Επεξεργασία ομάδας φίλτρων. Ένα παράδειγμα όπως το γράφει το webmail:
require ["fileinto"];
# rule:[Nieuwsbrieven]
if exists "List-Id"
{
fileinto "Nieuwsbrieven";
stop;
}
# rule:[Facturen]
if allof (header :contains "subject" "factuur")
{
fileinto "Facturen";
}
# rule:[Collega Daan]
if false # header :contains "from" "daan@example.com"
{
fileinto "INBOX.Team";
}Γραμμή προς γραμμή:
- Η
require ["fileinto"];ζητά από τον server την επέκταση που χρειάζεται για τη μετακίνηση σε φάκελο. Το webmail την προσθέτει μόνο του στην αρχή, μαζί με όλες τις επεκτάσεις που χρησιμοποιεί το script. - Η
# rule:[Nieuwsbrieven]είναι ένα σχόλιο. Με αυτό το webmail αναγνωρίζει το όνομα του φίλτρου σας. Ο server παραλείπει τη γραμμή. - Η
if exists "List-Id"είναι η συνθήκη: το μήνυμα έχει κεφαλίδα List-Id. Τα newsletter και οι λίστες αλληλογραφίας την έχουν (RFC 2919). - Η
fileinto "Nieuwsbrieven";μετακινεί το μήνυμα στον φάκελο Nieuwsbrieven (Newsletter). Το όνομα του φακέλου είναι το πλήρες όνομα στον server, με την τελεία ως διαχωριστικό (μάθημα 5.1). Ένας φάκελος κάτω από τα Εισερχόμενα ονομάζεται λοιπόνINBOX.Team. - Η
stop;σταματά ολόκληρο το script. Τα επόμενα φίλτρα δεν εξετάζουν πλέον αυτό το μήνυμα. Στο webmail η ενέργεια αυτή ονομάζεται Παύση επαλήθευσης κανόνων. - Η
if false # ...είναι ένα απενεργοποιημένο φίλτρο. Αν απενεργοποιήσετε την επιλογή Ενεργό φίλτρο, το webmail κάνει τη συνθήκηfalse: ποτέ αληθής. Η παλιά συνθήκη μένει ως σχόλιο, ώστε να μπορείτε να την ενεργοποιήσετε ξανά αργότερα.

Από πάνω προς τα κάτω
Ο server διαβάζει το script από πάνω προς τα κάτω και εξετάζει κάθε φίλτρο. Ισχύουν τρεις κανόνες.
1. Χωρίς ενέργεια, το μήνυμα μένει στα Εισερχόμενα. Η Sieve γνωρίζει τη σιωπηρή διατήρηση (implicit keep, RFC 5228, ενότητα 2.10.2): αν κανένα φίλτρο δεν κάνει τίποτα, το μήνυμα πηγαίνει κανονικά στα Εισερχόμενα.
2. Μετά από μια μετακίνηση, το μήνυμα δεν βρίσκεται επιπλέον στα Εισερχόμενα. Ένα fileinto απενεργοποιεί τη σιωπηρή διατήρηση. Το μήνυμα πηγαίνει στον επιλεγμένο φάκελο και όχι επιπλέον στα Εισερχόμενα. Αν θέλετε και τα δύο, χρησιμοποιήστε την ενέργεια Αντιγραφη μυνηματος σε.
3. Χωρίς stop, εξετάζουν και τα επόμενα φίλτρα. Αν λείπει το stop, ο server συνεχίζει με το επόμενο φίλτρο. Αν ταιριάζει και εκείνο, ο server εκτελεί και τη δική του ενέργεια. Δύο μετακινήσεις σε δύο φακέλους σημαίνουν ότι το μήνυμα καταλήγει και στους δύο φακέλους. Με το stop αποφασίζει το πρώτο φίλτρο που ταιριάζει.
Γι' αυτό η σειρά έχει σημασία. Στο παραπάνω παράδειγμα το Nieuwsbrieven βρίσκεται πάνω από το Facturen, με stop. Ένα newsletter με "Je factuur" στο θέμα πηγαίνει λοιπόν στο Nieuwsbrieven και όχι στο Facturen. Αν αντιστρέψετε τη σειρά, το ίδιο newsletter καταλήγει στο Facturen, επειδή εκείνο το φίλτρο δεν έχει stop και έρχεται τώρα πρώτο. Το newsletter θα βρισκόταν μάλιστα και στους δύο φακέλους. Γι' αυτό τοποθετήστε τα πιο συγκεκριμένα φίλτρα στην κορυφή και δώστε τους stop.
Παρακολουθήστε ένα μήνυμα: έτσι κάνετε την πρόβλεψη
Πάρτε ένα μήνυμα και περάστε το από το script όπως κάνει ο server:
- Ξεκινήστε από το πρώτο φίλτρο. Είναι απενεργοποιημένο (
if false); Παραλείψτε το. - Ισχύει η συνθήκη; Κοιτάξτε προσεκτικά την κεφαλίδα: η
subjectείναι το θέμα, ηfromο αποστολέας με όνομα και διεύθυνση, ηtoο παραλήπτης. - Αν ναι: εκτελέστε τις ενέργειες. Αν υπάρχει
stop, έχετε τελειώσει. - Αν όχι, ή αν δεν υπάρχει stop: πηγαίνετε στο επόμενο φίλτρο.
- Στο τέλος: αν κανένα φίλτρο δεν μετακίνησε ή διέγραψε το μήνυμα, αυτό βρίσκεται στα Εισερχόμενα (
INBOX).
Με αυτά τα πέντε βήματα μπορείτε να διαβάσετε οποιοδήποτε script, ακόμη κι αν είναι μεγάλο.
Στην πράξη: έτσι λειτουργεί στο webmail
Τα φίλτρα τα βρίσκετε στις Ρυθμίσεις > Φίλτρα. Η λίστα δείχνει τα φίλτρα σας με τη σειρά που τα εκτελεί ο server· τα σύρετε για να αλλάξετε τη σειρά. Στις Ενέργειες βρίσκεται η Επεξεργασία ομάδας φίλτρων: εκεί βλέπετε και αλλάζετε το script ως κείμενο. Τα βήματα για ένα νέο φίλτρο θα τα βρείτε στον Οδηγό Roundcube, στην ενότητα Δημιουργία φίλτρου. Σε άλλα webmail λειτουργεί παρόμοια: το Gmail έχει φίλτρα, το Outlook.com κανόνες. Αυτά δεν χρησιμοποιούν Sieve, αλλά και εκεί ισχύουν η σειρά και η διακοπή.
Σύνοψη
- Τα φίλτρα εκτελούνται στον mail server κατά την παράδοση, άρα και όταν το webmail είναι κλειστό, και μόνο σε νέα μηνύματα.
- Το webmail γράφει τα φίλτρα σας ως script Sieve (RFC 5228) και το αποθηκεύει στον server μέσω ManageSieve.
- Τα περιέχει, είναι ίσο με και ταιριάζει με την έκφραση δεν κάνουν από προεπιλογή διάκριση κεφαλαίων και πεζών.
- Αν κανένα φίλτρο δεν κάνει τίποτα, το μήνυμα μένει στα Εισερχόμενα· μετά από μια μετακίνηση δεν βρίσκεται επιπλέον στα Εισερχόμενα.
- Τα φίλτρα εκτελούνται από πάνω προς τα κάτω· το stop τερματίζει το script, άρα η σειρά καθορίζει το αποτέλεσμα.
Κουίζ
Άσκηση
Άσκηση A6.1: Πού καταλήγει αυτό το μήνυμα; Ανοίξτε το υλικό filters-1.txt, ένα σετ φίλτρων όπως το γράφει το webmail, και το berichten-1.txt, με τις κεφαλίδες τεσσάρων εισερχόμενων μηνυμάτων, αριθμημένων από 1 έως 4. Περάστε κάθε μήνυμα από τα πέντε βήματα αυτού του μαθήματος: από πάνω προς τα κάτω, παραλείποντας τα απενεργοποιημένα φίλτρα και προσέχοντας το stop. Για κάθε μήνυμα συμπληρώστε το όνομα του φακέλου όπου καταλήγει, ακριβώς όπως εμφανίζεται στο script· αν το μήνυμα καταλήγει στα Εισερχόμενα, συμπληρώστε INBOX. Το πρόγραμμα συγκρίνει τις τέσσερις απαντήσεις σας με το κλειδί απαντήσεων και δείχνει για κάθε μήνυμα ποιο φίλτρο ήταν καθοριστικό.
Περαιτέρω ανάγνωση
Όπου αναφέρονται βήματα στο webmail, ισχύουν για το webmail της WebOké· σε άλλα webmail λειτουργεί παρόμοια.
- Roundcube Webmail 7.1: Δημιουργία φίλτρου
- Roundcube Webmail 7.2: Παραδείγματα χρήσιμων φίλτρων
- Κανόνες email στον server (φίλτρα στον server)
- RFC 5228, Sieve: An Email Filtering Language (στα αγγλικά): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (στα αγγλικά): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (στα αγγλικά): https://www.rfc-editor.org/rfc/rfc2919
- Je filters als Sieve-script bekijken, downloaden en terugzetten
