+++ title = 'procmail' date = '2001-09-01T00:00:00Z' description = '' author = 'Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)' issue = ['Magaz 30'] issue_weight = 4 +++ ---------------------------------------------------------------------------------------------------------------------------------------------------------------- *USING **procmail**. Πώς;* ---------------------------------------------------------------------------------------------------------------------------------------------------------------- **1. Γενικά** ---------------------------------------- - [1.1 DISCLAIMER](#ss1.1) - [1.2 Τι είναι το **procmail**](#ss1.2) **2. Στο ψητό** ------------------------------------------ - [2.1 Η κατάσταση των διανομών σε σχέση με το **procmail** σήμερα](#ss2.1) - [2.2 Εάν το **procmail** δεν έχει έρθει μαζί με την διανομή μου τι κάνω;](#ss2.2) - [2.3 Κατάφερα να ξεκινήσω το **procmail** μετά τι κάνω;](#ss2.3) **3. Παράδειγμα αρχείου procmailrc.** ---------------------------------------------------------------- **4. Bibliography** ---------------------------------------------- ### [1. Γενικά]{#s1} ### [1.1 DISCLAIMER]{#ss1.1} Δεν φέρω καμία ευθύνη εάν η εφαρμογή των παρακάτω προκαλέσει οποιουδήποτε είδους ζημία στο μηχάνημα σας ή στα δεδομένα σας. ### [1.2 Τι είναι το **procmail**]{#ss1.2} Το **procmail** είναι ένα πρόγραμμα με το οποίο μπορείς να επεξεργαστείς, φιλτράρεις, ταξινομήσεις το e-mail σου. Με το **procmail** μπορείς επίσης να φτιάξεις **auto-mail-responders, mailing lists** και πολλά άλλα. ### [2. Στο ψητό]{#s2} ### [2.1 Η κατάσταση των διανομών σε σχέση με το **procmail** σήμερα]{#ss2.1} Το **procmail** έρχεται σήμερα ως ο **default mail delivery** agent σε SuSE 6.4 και Slackware 7.1. Αυτό σημαίνει ότι όχι μόνο το **procmail** έρχεται έτοιμο σε αυτές τις διανομές αλλά και ότι το sendmail είναι έτσι ρυθμισμένο ώστε να χρησιμοποιεί το **procmail** σαν mail delivery agent (MDA) αντί του παραδοσιακού mail. Σύμφωνα με τα παραπάνω συμπεραίνω (μπορεί και εσφαλμένα βέβαια) ότι το **procmail** έρχεται ως ο default MDA στις περισσότερες διανομές. ### [2.2 Εάν το **procmail** δεν έχει έρθει μαζί με την διανομή μου τι κάνω;]{#ss2.2} Εάν είναι αυτή η περίπτωση σας τότε θα πρέπει να κατεβάσετε το **procmail** απο το , να το κάνετε compile σύμφωνα με τις οδηγίες που σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές: Mπορείτε να ρυθμίσετε το sendmail ώστε να χρησιμοποιεί απευθείας το **procmail** σαν MDA ή Nα βάλετε μέσα στο .forward την παρακάτω γραμμή: ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |exec /usr/bin/:lockfile contitions exactly one action. ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Φυσικά μπορούμε να χρησιμοποιήσουμε πολλα τέτοια block εντολών μέσα σε ένα .**procmailrc** #### Flags Στην πρώτη γραμμή δηλώνουμε ότι ξεκινάμε ένα νέο `block απο filtering rules` (χρησιμοποιώντας το `:0`). Δηλώνουμε με τι `flags` θέλουμε να γίνει αυτο το φιλτράρισμα και αν θέλουμε όσο γίνεται αυτο να έχουμε κλειδωμένο το αρχείο ή τα αρχεία στα οποία αναφέρεται αυτο το `block` με ένα `lockfile`. Μερικά απο τα πιο κοινά `flags` είναι το `c` και το `f` με το πρώτο δημιουργούμε ένα πιστό αντίγραφο του μυνήματος που βρίσκεται υπο επεξεργασία και δουλεύουμε πάνω σε αυτό.\ Αυτό το flag χρησιμοποιείται όταν θέλουμε να στείλουμε ή να προωθήσουμε ένα μύνημα σε πολλούς παραλήπτες ή σε πολλούς φακέλους. Το δεύτερο flag χρησιμοποιείται όταν θέλουμε να θεωρήσουμε το ένα `pipe` σαν φίλτρο. Φυσικά το πιο κοινό είναι να μην χρησιμοποιήσουμε καθόλου `flags` και να επεξεργαστούμε το ίδιο το e-mail με το **procmail** χωρίς να το περάσουμε σε ένα άλλο πρόγραμμα ή να εργαστούμε πάνω σε ένα αντίγραφο του. Υπάρχουν και άλλα πολλά `flags` τα οποία συνδιαζόμενα δίνουν στο **procmail** τεράστια ευελιξία αλλά δεν θα αναφερθούν έδω.\ Περιγράφονται αναλυτικά στο σχετικό manual page (**`man procmailrc`**). #### Lockfiles Το γιατί μπορεί κάποιος να θέλει να χρησιμοποιήσει `lockfiles` έχει αναφερθεί παραπάνω. Το όνομα ενός `lockfile` δηλώνεται ως εξής : ---------------------------------------------------------------------------------------------------------------------------------------------------------------- :0:lockfilename ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Μπορούμε να παραλείψουμε το όνομα του `lockfile` και η προηγούμενη έκφραση να γίνει η εξής ---------------------------------------------------------------------------------------------------------------------------------------------------------------- :0: ---------------------------------------------------------------------------------------------------------------------------------------------------------------- οπότε το **procmail** χρησιμοποιεί το όνομα του αρχείου στο οποίο αναφέρεται αυτο το `block` εντολών για να φτιάξει ένα `lockfile`.\ Ασφαλώς μπορούμε να μην χρησιμοποιήσουμε καθόλου `lockfile` σε ένα block εντολών οπότε η έκφραση γίνεται ---------------------------------------------------------------------------------------------------------------------------------------------------------------- :0 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Υπάρχουν δύο περιπτώσεις όπου η χρήση `lockfile` δεν έχει νόημα. Η μια περίπτωση είναι αυτή οταν κατευθύνεις κάποιο μύνημα στο **/dev/null** και ή δέυτερη είναι όταν κάνεις **forward** ένα μύνημα σε κάποια άλλη διέυθυνση e-mail (όπως στο παράδειγμα **procmailrc** ). #### Conditions Το **procmail** για να δει εάν το μύνημα που επεξεργάζεται αυτή την στιγμή πληρεί τις συνθήκες που εσείς του έχετε δηλώσει περνάει όλο το μύνημα μέσα απο την **`egrep`** δίνοντας της σαν **`regular expression`** τα contitions που έχετε γράψει εσείς. Δηλαδή τα contitions αυτά δεν είναι τίποτα άλλο απο **`regular expressions`**. Για περισσότερα για τις **`regular expressions, man egrep.`** #### Action(s) Τα actions του **procmail** μπορεί να είναι οτιδήποτε (σχεδόν) απο ένα απλό όνομα οπότε το **procmail** γράφει τα μυνήματα που πληρούν τις συνθήκες σε ένα αρχείο με αυτο το όνομα μέσα στο `MAILDIRECTORY`, μια ή πολλές e-mail adress οπότε το **procmail** απλά κάνει forward το μύνημα σε αυτές τις διευθύνσεις ή τέλος το input οποιουδήποτε προγράμματος.\ Όπως έχω γράψει παραπάνω την σύνταξη των `filtering rules` είμαστε αναγκασμένοι να χρησιμοποιήσουμε μόνο ένα `action`. Μπορούμε όμως με την χρήση των αγκύλων {} να κάνουμε `nest` πολλά `blocks` απο `actions` τα οποία μπορεί να είναι ακόμα και condition rules : ---------------------------------------------------------------------------------------------------------------------------------------------------------------- :0: condition {action1,action2,action3} ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [3. Παράδειγμα αρχείου procmailrc.]{#s3} ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # 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 * ^From.*thf@somewhere.someplace todd # will go to $MAILDIR/todd :0 # Anything from people at uunet * ^From.*@uunet uunetbox # will go to $MAILDIR/uunetbox :0 # Anything from Henry * ^From.*henry henries # will go to $MAILDIR/henries # Anything that has not been delivered by now will go to $DEFAULT # using LOCKFILE=$DEFAULT$LOCKEXT ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [4. Bibliography]{#s4} Καταλήγοντας θα ήθελα να πω ότι σε αυτό το άρθρο επιχείρησα να καλύψω τις απολύτως βασικές λειτουργίες του **procmail**, προσπαθώντας να είμαι σύντομος και περιεκτικός. Για περισσότερες πληροφορίες παρακαλώ να αναφερθείτε στο documentation που έρχεται μαζί με τον κώδικα του **procmail** καθώς και στην σελίδα του