procmail

Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)
Σεπ 2001

USING procmail. Πώς;

1. Γενικά

2. Στο ψητό

3. Παράδειγμα αρχείου procmailrc.

4. Bibliography

[1. Γενικά]

[1.1 DISCLAIMER]

Δεν φέρω καμία ευθύνη εάν η εφαρμογή των παρακάτω προκαλέσει οποιουδήποτε είδους ζημία στο μηχάνημα σας ή στα δεδομένα σας.

[1.2 Τι είναι το procmail]

Το procmail είναι ένα πρόγραμμα με το οποίο μπορείς να επεξεργαστείς, φιλτράρεις, ταξινομήσεις το e-mail σου. Με το procmail μπορείς επίσης να φτιάξεις auto-mail-responders, mailing lists και πολλά άλλα.

[2. Στο ψητό]

[2.1 Η κατάσταση των διανομών σε σχέση με το procmail σήμερα]

Το 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 δεν έχει έρθει μαζί με την διανομή μου τι κάνω;]

Εάν είναι αυτή η περίπτωση σας τότε θα πρέπει να κατεβάσετε το procmail απο το http://www.procmail.org[1], να το κάνετε compile σύμφωνα με τις οδηγίες που σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές:

1: http://www.procmail.org

Mπορείτε να ρυθμίσετε το sendmail ώστε να χρησιμοποιεί απευθείας το procmail σαν MDA ή

Nα βάλετε μέσα στο .forward την παρακάτω γραμμή:

|exec /usr/bin/<bf/procmail/


Βεβαίως υπάρχουν και άλλοι τρόποι για να ξεκινήσεις το procmail αλλά αυτοί ξεφεύγουν απο τον σκοπό αυτού του κειμένου ο οποίος είναι να δείξει τις βασικές ρυθμίσεις και λειτουργίες του procmail.

[2.3 Κατάφερα να ξεκινήσω το 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.

Filtering rules

Ο τρόπος που συντάσσονται οι κανόνες φιλτραρίσματος για το procmail είναι ο παρακάτω:

:0<flags>: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<flags>:lockfilename


Μπορούμε να παραλείψουμε το όνομα του lockfile και η προηγούμενη έκφραση να γίνει η εξής

:0<flags>: 


οπότε το procmail χρησιμοποιεί το όνομα του αρχείου στο οποίο αναφέρεται αυτο το block εντολών για να φτιάξει ένα lockfile.

Ασφαλώς μπορούμε να μην χρησιμοποιήσουμε καθόλου lockfile σε ένα block εντολών οπότε η έκφραση γίνεται

:0<flags>


Υπάρχουν δύο περιπτώσεις όπου η χρήση 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.]

# 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

todd                            # will go to $MAILDIR/todd

:0                              # Anything from people at uunet

uunetbox                        # will go to $MAILDIR/uunetbox

:0                              # Anything 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]

Καταλήγοντας θα ήθελα να πω ότι σε αυτό το άρθρο επιχείρησα να καλύψω τις απολύτως βασικές λειτουργίες του procmail, προσπαθώντας να είμαι σύντομος και περιεκτικός. Για περισσότερες πληροφορίες παρακαλώ να αναφερθείτε στο documentation που έρχεται μαζί με τον κώδικα του procmail καθώς και στην σελίδα του

Αρχική Σελίδα