15 KiB
+++ title = 'procmail' date = '2001-09-01T00:00:00Z' description = '' author = 'Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)' issue = ['Magaz 30'] issue_weight = 4 +++
USING procmail. Πώς;
1. Γενικά
2. Στο ψητό
- 2.1 Η κατάσταση των διανομών σε σχέση με το procmail σήμερα
- 2.2 Εάν το procmail δεν έχει έρθει μαζί με την διανομή μου τι κάνω;
- 2.3 Κατάφερα να ξεκινήσω το procmail μετά τι κάνω;
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, να το κάνετε compile σύμφωνα με τις οδηγίες που σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές:
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
* ^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]
Καταλήγοντας θα ήθελα να πω ότι σε αυτό το άρθρο επιχείρησα να καλύψω τις απολύτως βασικές λειτουργίες του procmail, προσπαθώντας να είμαι σύντομος και περιεκτικός. Για περισσότερες πληροφορίες παρακαλώ να αναφερθείτε στο documentation που έρχεται μαζί με τον κώδικα του procmail καθώς και στην σελίδα του