Procmail

From YobiWiki
Revision as of 23:41, 24 November 2006 by <bdi>PhilippeTeuwen</bdi> (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Installation

apt-get install procmail

installer les ~/.procmailrc tels que celui-ci:

Exemple de ~/.procmailrc:

#Preliminaries
SHELL=/bin/bash               #Use the Bourne shell (check your path!)
MAILDIR=${HOME}/Maildir/      #First check what your mail directory is!
LOGFILE=${MAILDIR}procmail.log
DEFAULT=${MAILDIR}
ORGMAIL=${MAILDIR}
#LOG="--- Logging ${LOGFILE} for ${LOGNAME}, "
UMASK=007
COMSAT=no                     # If you don't use biff/comsat notifier

#Troubleshooting:
VERBOSE=no
#LOGABSTRACT=all
LOGABSTRACT=no

#Whatever recipes you'll use
#The order of the recipes is significant

## Pour utiliser une install locale de spamassassin:
## On trie ce qui a déjà été scanné et taggué comme spam:
:0
* ^X-Spam-Status: Yes|\
  ^X-Spam-Flag: YES|\
  ^Subject: \*\*\*\*\*SPAM\*\*\*\*\*
.SPAM/
## On appelle spamassassin puis on continue les règles de tri
:0fw: spamassassin.lock
* <
| /usr/local/bin/spamassassin -a
## On écarte les mails taggués comme spam
:0
* ^X-Spam-Flag: YES
.Internet.SPAM/

## Exemple complexe pour envoyer un SMS via un mail avec pour sujet: "[1] corps du SMS"
## [SMS:]
#:0 c
#* ^Subject: \[SMS:[0-9]+\]
#|gawk '/^Subject: \[SMS/{sub(/^Subject: \[SMS:[0-9]+\]/,"");print}'|linuxsms -server:gomobile2 -prefix:32 -number:$MATCH

:0
* ^From: root@teuwen\.org
.Logs/

# Pour trier toutes les mailing-lists de Debian dans des folders séparés:
:0
* ^X-Mailing-List: <debian-.+@lists\.debian\.org>
* ^X-Mailing-List: <debian-\/[-a-zA-Z0-9]+
.Debian.$MATCH/

Voir MailServer, section Procmail pour plus d'infos
ainsi que:

apt-get install procmail-lib

Pour vérifier la syntaxe du fichier:

proclint ~/.procmailrc

Nombreuses recettes dans /usr/share/procmail-lib qu'on peut inclure via INCLUDERC,
cf /usr/share/doc/procmail-lib/examples

winmail.dat

Pour décoder les attachements d'Outlook, utiliser ytnef et éventuellement l'intégrer à procmail:

apt-get install ytnef libmime-perl libmailtools-perl

(en tant q'utilisateur:)

mkdir -p ~~/.ytnef/output

dans ~/.procmailrc, ajouter qqch comme:

PATH=/bin:/usr/bin
HOME=/home/<user>
:0fw
* > 0
| /usr/bin/ytnef-filter

Sort and copy

Le but de ce setup est de trier les mails, les marquer comme lus, et placer une copie non-lue dans un répertoire commun .
Ainsi pour consulter les nouveaux mails, un seul répertoire à regarder où l'on efface au fur et à mesure les mails qu'on a lu.
Les mails triés habituellement servent alors uniquement d'archives.

.procmail-file.rc

#.procmail-file.rc
#
# Author: Philippe Teuwen <phil@teuwen.org>
#
# Set these variables before invoking:
#
# As global:
# COPYDEST      Destination to drop a copy of the filed mail, this copy will be left unread
# Per rule:
# REGEXn        With n=1..3, allows to have up to three regexps on the headers (^ is already prepend)
# DEST          Destination into which addressed mail will be dropped, this copy will be marked as read
# NOCOPY=1      (opt) Set the variable to avoid leaving the copy, only filing and marking as read
# INCLUDERC=.procmail-file.rc

:0
* $REGEX3 ?? .
* $REGEX2 ?? .
* $REGEX1 ?? .
* $ ^$REGEX1
* $ ^$REGEX2
* $ ^$REGEX3
{
  :0 c
  * ! $NOCOPY ?? .
  $COPYDEST

  # To file the mail as usual (c is just to continue rules processing, the copy won't be used)
  :0 c
  $DEST

  # To mark the last mail as read by renaming the file
  :0 ai
  * LASTFOLDER ?? ()\/[^/]+^^
  |mv "$LASTFOLDER" "$DEST/cur/$MATCH:2,S"
}

:0
* ! $REGEX3 ?? .
* $REGEX2 ?? .
* $REGEX1 ?? .
* $ ^$REGEX1
* $ ^$REGEX2
{
  :0 c
  * ! $NOCOPY ?? .
  $COPYDEST

  # To file the mail as usual (c is just to continue rules processing, the copy won't be used)
  :0 c
  $DEST

  # To mark the last mail as read by renaming the file
  :0 ai
  * LASTFOLDER ?? ()\/[^/]+^^
  |mv "$LASTFOLDER" "$DEST/cur/$MATCH:2,S"
}

:0
* ! $REGEX3 ?? .
* ! $REGEX2 ?? .
* $REGEX1 ?? .
* $ ^$REGEX1
{
  :0 c
  * ! $NOCOPY ?? .
  $COPYDEST

  # To file the mail as usual (c is just to continue rules processing, the copy won't be used)
  :0 c
  $DEST

  # To mark the last mail as read by renaming the file
  :0 ai
  * LASTFOLDER ?? ()\/[^/]+^^
  |mv "$LASTFOLDER" "$DEST/cur/$MATCH:2,S"
}

REGEX1=
REGEX2=
REGEX3=
NOCOPY=

.procmailrc

COPYDEST=.Already_filed/
FILER="${HOME}/.procmail-file.rc"

# Example: 2 regex to select mail s from root and with subject Cron
REGEX1="From:.*root"
REGEX2="Subject: Cron"
DEST=.Logs.Cron/                        INCLUDERC=$FILER

# Another example: reminders are folded and marked as read but
# we don't even want to see them in our COPYDEST
REGEX1="Subject:.*mailing list memberships reminder"
NOCOPY=1
DEST=.Mailing-lists.reminders/          INCLUDERC=$FILER