💾 Archived View for magaz.hellug.gr › 30 › 04_procmail › index.gmi captured on 2024-02-05 at 09:32:09. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr) Σεπ 2001
USING procmail. Πώς;
1. Γενικά
2. Στο ψητό
3. Παράδειγμα αρχείου procmailrc.
4. Bibliography
Δεν φέρω καμία ευθύνη εάν η εφαρμογή των παρακάτω προκαλέσει οποιουδήποτε είδους ζημία στο μηχάνημα σας ή στα δεδομένα σας.
Το procmail είναι ένα πρόγραμμα με το οποίο μπορείς να επεξεργαστείς, φιλτράρεις, ταξινομήσεις το e-mail σου. Με το procmail μπορείς επίσης να φτιάξεις auto-mail-responders, mailing lists και πολλά άλλα.
Το procmail έρχεται σήμερα ως ο default mail delivery agent σε SuSE 6.4 και Slackware 7.1.
Αυτό σημαίνει ότι όχι μόνο το procmail έρχεται έτοιμο σε αυτές τις διανομές αλλά και ότι το sendmail είναι έτσι ρυθμισμένο ώστε να χρησιμοποιεί το procmail σαν mail delivery agent (MDA) αντί του παραδοσιακού mail. Σύμφωνα με τα παραπάνω συμπεραίνω (μπορεί και εσφαλμένα βέβαια) ότι το procmail έρχεται ως ο default MDA στις περισσότερες διανομές.
Εάν είναι αυτή η περίπτωση σας τότε θα πρέπει να κατεβάσετε το procmail απο το http://www.procmail.org[1], να το κάνετε compile σύμφωνα με τις οδηγίες που σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές:
Mπορείτε να ρυθμίσετε το sendmail ώστε να χρησιμοποιεί απευθείας το procmail σαν MDA ή
Nα βάλετε μέσα στο .forward την παρακάτω γραμμή:
|exec /usr/bin/<bf/procmail/
Βεβαίως υπάρχουν και άλλοι τρόποι για να ξεκινήσεις το procmail αλλά αυτοί ξεφεύγουν απο τον σκοπό αυτού του κειμένου ο οποίος είναι να δείξει τις βασικές ρυθμίσεις και λειτουργίες του procmail.
Το procmail αφού ξεκινήσει διαβάζει τις οδηγίες που του έχετε γράψει εσείς μέσα στο .procmailrc στο home directory σας.
Μέσα σε αυτο το αρχείο δηλώνονται κάποιες μεταβλητές περιβάλλοντος και οι οδηγίες επεξεργασίας του εισερχόμενου e-mail ας κοιτάξουμε ένα απο τα παραδείγματα που δίνει το procmail μαζί με τον κώδικά του. Εξετάζουμε το 1procmailrc
Στην αρχή δηλώνει κάποιες μεταβλητές περιβάλλοντος όπως το PATH, το DEFAULT MAILBOX, το MAILDIRECTORY, το LOGFILE και ένα LOCKFILE.
Το MAILDIRECTORY είναι το directory μέσα στο οποίο θα μπούν όλα τα αρχεία που θα δημιουργηθούν απο το procmail μετά απο την επεξεργασία των e-mail.
Το DEFAULT MAILBOX είναι το directory μέσα στο οποίο θα καταλήξουν τα e-mail που δεν θα πληρούν καμία απο τις συνθήκες φιλτραρίσματος απο αυτές που έχετε γράψει παρακάτω. Δεν είναι απαραίτητο να ορίσετε DEFAULT MAILBOX. Εάν δεν ορίσετε DEFAULT MAILBOX τα e-mail θα παραμείνουν στο /var/spool/username.
Το LOGFILE είναι το αρχείο που καταγράφονται όλες οι κινήσεις του procmail.
Όσο για το LOCKFILE είναι το αρχείο που χρησιμοποιείται για το κλείδωμα του DEFAULT MAILBOX για να αποφευχθεί η περίπτώση να έρθουν δύο e-mail συγχρόνως και να προσπαθόυν δύο procmail να γράψουν στο DEFAULT MAILBOX την ίδια στιγμή με αποτέλεσμα να χάσετε ένα απο τα δύο e-mail.
Ο τρόπος που συντάσσονται οι κανόνες φιλτραρίσματος για το procmail είναι ο παρακάτω:
:0<flags>:lockfile contitions exactly one action.
Φυσικά μπορούμε να χρησιμοποιήσουμε πολλα τέτοια block εντολών μέσα σε ένα .procmailrc
Στην πρώτη γραμμή δηλώνουμε ότι ξεκινάμε ένα νέο block απο filtering rules (χρησιμοποιώντας το :0). Δηλώνουμε με τι flags θέλουμε να γίνει αυτο το φιλτράρισμα και αν θέλουμε όσο γίνεται αυτο να έχουμε κλειδωμένο το αρχείο ή τα αρχεία στα οποία αναφέρεται αυτο το block με ένα lockfile.
Μερικά απο τα πιο κοινά flags είναι το c και το f με το πρώτο δημιουργούμε ένα πιστό αντίγραφο του μυνήματος που βρίσκεται υπο επεξεργασία και δουλεύουμε πάνω σε αυτό.
Αυτό το flag χρησιμοποιείται όταν θέλουμε να στείλουμε ή να προωθήσουμε ένα μύνημα σε πολλούς παραλήπτες ή σε πολλούς φακέλους.
Το δεύτερο flag χρησιμοποιείται όταν θέλουμε να θεωρήσουμε το ένα pipe σαν φίλτρο. Φυσικά το πιο κοινό είναι να μην χρησιμοποιήσουμε καθόλου flags και να επεξεργαστούμε το ίδιο το e-mail με το procmail χωρίς να το περάσουμε σε ένα άλλο πρόγραμμα ή να εργαστούμε πάνω σε ένα αντίγραφο του.
Υπάρχουν και άλλα πολλά flags τα οποία συνδιαζόμενα δίνουν στο procmail τεράστια ευελιξία αλλά δεν θα αναφερθούν έδω.
Περιγράφονται αναλυτικά στο σχετικό manual page (man procmailrc).
Το γιατί μπορεί κάποιος να θέλει να χρησιμοποιήσει lockfiles έχει αναφερθεί παραπάνω. Το όνομα ενός lockfile δηλώνεται ως εξής :
:0<flags>:lockfilename
Μπορούμε να παραλείψουμε το όνομα του lockfile και η προηγούμενη έκφραση να γίνει η εξής
:0<flags>:
οπότε το procmail χρησιμοποιεί το όνομα του αρχείου στο οποίο αναφέρεται αυτο το block εντολών για να φτιάξει ένα lockfile.
Ασφαλώς μπορούμε να μην χρησιμοποιήσουμε καθόλου lockfile σε ένα block εντολών οπότε η έκφραση γίνεται
:0<flags>
Υπάρχουν δύο περιπτώσεις όπου η χρήση lockfile δεν έχει νόημα. Η μια περίπτωση είναι αυτή οταν κατευθύνεις κάποιο μύνημα στο /dev/null και ή δέυτερη είναι όταν κάνεις forward ένα μύνημα σε κάποια άλλη διέυθυνση e-mail (όπως στο παράδειγμα procmailrc ).
Το procmail για να δει εάν το μύνημα που επεξεργάζεται αυτή την στιγμή πληρεί τις συνθήκες που εσείς του έχετε δηλώσει περνάει όλο το μύνημα μέσα απο την egrep δίνοντας της σαν regular expression τα contitions που έχετε γράψει εσείς.
Δηλαδή τα contitions αυτά δεν είναι τίποτα άλλο απο regular expressions. Για περισσότερα για τις regular expressions, man egrep.
Τα actions του procmail μπορεί να είναι οτιδήποτε (σχεδόν) απο ένα απλό όνομα οπότε το procmail γράφει τα μυνήματα που πληρούν τις συνθήκες σε ένα αρχείο με αυτο το όνομα μέσα στο MAILDIRECTORY, μια ή πολλές e-mail adress οπότε το procmail απλά κάνει forward το μύνημα σε αυτές τις διευθύνσεις ή τέλος το input οποιουδήποτε προγράμματος.
Όπως έχω γράψει παραπάνω την σύνταξη των filtering rules είμαστε αναγκασμένοι να χρησιμοποιήσουμε μόνο ένα action. Μπορούμε όμως με την χρήση των αγκύλων {} να κάνουμε nest πολλά blocks απο actions τα οποία μπορεί να είναι ακόμα και condition rules :
:0: condition {action1,action2,action3}
# Please check if all the paths in PATH are reachable, remove the ones that # are not. PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:. MAILDIR=$HOME/Mail # You'd better make sure it exists DEFAULT=$MAILDIR/mbox LOGFILE=$MAILDIR/from LOCKFILE=$HOME/.lockmail :0 # Anything from thf
Καταλήγοντας θα ήθελα να πω ότι σε αυτό το άρθρο επιχείρησα να καλύψω τις απολύτως βασικές λειτουργίες του procmail, προσπαθώντας να είμαι σύντομος και περιεκτικός. Για περισσότερες πληροφορίες παρακαλώ να αναφερθείτε στο documentation που έρχεται μαζί με τον κώδικα του procmail καθώς και στην σελίδα του