217 γραμμές
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			217 γραμμές
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
+++
 | 
						||
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 σύμφωνα με τις οδηγίες που
 | 
						||
σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές:
 | 
						||
 | 
						||
Mπορείτε να ρυθμίσετε το 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** καθώς και στην σελίδα του
 |