magaz/content/articles/30/04_procmail.md
2022-03-23 20:14:33 +02:00

217 γραμμές
15 KiB
Markdown

Αυτό το αρχείο περιέχει ασαφείς χαρακτήρες Unicode

Αυτό το αρχείο περιέχει χαρακτήρες Unicode που μπορεί να συγχέονται με άλλους χαρακτήρες. Αν νομίζετε ότι αυτό είναι σκόπιμο, μπορείτε να αγνοήσετε με ασφάλεια αυτή την προειδοποίηση. Χρησιμοποιήστε το κουμπί Escape για να τους αποκαλύψετε.

+++
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** απο το <http://www.procmail.org>, να το κάνετε compile σύμφωνα με τις οδηγίες που
σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές:
ορείτε να ρυθμίσετε το sendmail ώστε να χρησιμοποιεί απευθείας το **procmail** σαν MDA ή
Nα βάλετε μέσα στο .forward την παρακάτω γραμμή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|exec /usr/bin/<bf/procmail/
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Βεβαίως υπάρχουν και άλλοι τρόποι για να ξεκινήσεις το **procmail** αλλά αυτοί ξεφεύγουν απο τον σκοπό αυτού του κειμένου ο οποίος είναι να δείξει τις βασικές
ρυθμίσεις και λειτουργίες του **procmail**.
### [2.3 Κατάφερα να ξεκινήσω το **procmail** μετά τι κάνω;]{#ss2.3}
Το **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.]{#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** καθώς και στην σελίδα του