Ενότητα 6 · 6.1
Πώς λειτουργούν τα φίλτρα
Ενότητα 6: Αυτόματα: φίλτρα και απουσία · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να εξηγήσετε πού και πότε εκτελούνται τα φίλτρα, να διαβάσετε ένα script φίλτρων σε Sieve και να προβλέψετε σε ποιον φάκελο θα καταλήξει ένα εισερχόμενο μήνυμα.
Βασικές έννοιες: φίλτρο, Sieve, ManageSieve, σετ φίλτρων, κανόνας, συνθήκη, ενέργεια, σιωπηρή διατήρηση, stop, περιέχει, είναι ίσο με, ταιριάζει με την έκφραση
Τα φίλτρα εκτελούνται στον server
Ένα φίλτρο ταξινομεί αυτόματα την αλληλογραφία σας: μηνύματα με "τιμολόγιο" στο θέμα πηγαίνουν στον φάκελο Τιμολόγια, τα ενημερωτικά δελτία σε δικό τους φάκελο. Το σημαντικότερο που πρέπει να γνωρίζετε: η ταξινόμηση αυτή δεν γίνεται στο 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, που αντιμετωπίζει κεφαλαία και πεζά γράμματα ως ίδια. Το "τιμολόγιο" βρίσκει λοιπόν και το "ΤΙΜΟΛΌΓΙΟ" και το "Τιμολόγιο".
Έτσι μοιάζει ένα σετ φίλτρων
Στο webmail μπορείτε να δείτε το σετ φίλτρων ως κείμενο από Φίλτρα > Ενέργειες > Επεξεργασία ομάδας φίλτρων. Ένα παράδειγμα, όπως το γράφει το webmail:
require ["fileinto"];
# rule:[Ενημερωτικά]
if exists "List-Id"
{
fileinto "Ενημερωτικά";
stop;
}
# rule:[Τιμολόγια]
if allof (header :contains "subject" "τιμολόγιο")
{
fileinto "Τιμολόγια";
}
# rule:[Συνάδελφος Νίκος]
if false # header :contains "from" "nikos@example.com"
{
fileinto "INBOX.Ομάδα";
}Γραμμή προς γραμμή:
- Το
require ["fileinto"];ζητά από τον server την επέκταση που χρειάζεται για τη μετακίνηση σε φάκελο. Το webmail το προσθέτει μόνο του στην αρχή, μαζί με όλες τις επεκτάσεις που χρησιμοποιεί το script. - Το
# rule:[Ενημερωτικά]είναι σχόλιο. Με αυτό το webmail αναγνωρίζει το όνομα του φίλτρου σας. Ο server παραλείπει τη γραμμή. - Το
if exists "List-Id"είναι η συνθήκη: το μήνυμα έχει κεφαλίδα List-Id. Τα ενημερωτικά δελτία και οι λίστες αλληλογραφίας την έχουν (RFC 2919). - Το
fileinto "Ενημερωτικά";μετακινεί το μήνυμα στον φάκελο Ενημερωτικά. Το όνομα του φακέλου είναι το πλήρες όνομα στον server, με την τελεία ως διαχωριστικό (μάθημα 5.1). Ένας φάκελος κάτω από τα Εισερχόμενα ονομάζεται λοιπόνINBOX.Ομάδα. - Το
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 αποφασίζει το πρώτο φίλτρο που ταιριάζει.
Γι' αυτό η σειρά έχει σημασία. Στο παραπάνω παράδειγμα το Ενημερωτικά βρίσκεται πάνω από το Τιμολόγια, με stop. Ένα ενημερωτικό με "Νέο τιμολόγιο" στο θέμα πηγαίνει λοιπόν στα Ενημερωτικά και όχι στα Τιμολόγια. Αν αντιστρέψετε τη σειρά, το ίδιο ενημερωτικό καταλήγει στα Τιμολόγια, επειδή εκείνο το φίλτρο δεν έχει stop και τώρα έρχεται πρώτο. Το ενημερωτικό θα βρισκόταν μάλιστα και στους δύο φακέλους. Γι' αυτό τοποθετήστε τα πιο συγκεκριμένα φίλτρα στην κορυφή και δώστε τους 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, με τις κεφαλίδες (headers) τεσσάρων εισερχόμενων μηνυμάτων, αριθμημένων από 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
- Προβολή, λήψη και επαναφορά των φίλτρων σας ως Sieve script
