]> Sergey Matveev's repositories - public-inbox.git/blob - scripts/dc-dlvr
initial commit
[public-inbox.git] / scripts / dc-dlvr
1 #!/bin/sh
2 # Copyright (C) 2008-2013, Eric Wong <e@80x24.org>
3 # License: GPLv3 or later
4 # to use with postfix main.cf: mailbox_command = /etc/dc-dlvr "$EXTENSION"
5 DELIVER=/usr/lib/dovecot/deliver
6
7 # my personal preference is to use a catchall account to avoid generating
8 # backscatter, as invalid emails are usually spam
9 case $USER in
10 catchall) exec $DELIVER ;;
11 esac
12
13 # change if your spamc/spamd listens elsewhere
14 spamc='spamc -U /run/spamd.sock'
15
16 # allow plus addressing to train spam filters, $1 is the $EXTENSION
17 # which may be "trainspam" or "trainham".  Only allow spam training
18 # when $CLIENT_ADDRESS is empty (local client)
19 case $1,$CLIENT_ADDRESS in
20 trainspam,) exec $spamc -L spam > /dev/null 2>&1 ;;
21 trainham,) exec $spamc -L ham > /dev/null 2>&1 ;;
22 esac
23
24 TMPMSG=$(mktemp -t dc-dlvr.orig.$USER.XXXXXX || exit 1)
25 rm_list=$TMPMSG
26
27 # pre-filter, for infrequently read lists which do their own spam filtering:
28 if test -r ~/.dc-dlvr.pre
29 then
30         set -e
31         cat > $TMPMSG
32         DEFAULT_INBOX=$(. ~/.dc-dlvr.pre)
33         if test xINBOX != x"$DEFAULT_INBOX"
34         then
35                 $DELIVER -m $DEFAULT_INBOX < $TMPMSG
36                 exec rm -f $rm_list
37         fi
38         PREMSG=$(mktemp -t dc-dlvr.orig.$USER.XXXXXX || exit 1)
39         rm_list="$rm_list $PREMSG"
40         set +e
41         mv -f $TMPMSG $PREMSG
42         $spamc -E --headers < $PREMSG > $TMPMSG
43 else
44         $spamc -E --headers > $TMPMSG
45 fi
46 err=$?
47
48 # normal delivery
49 set -e
50
51 case $err in
52 1) $DELIVER -m INBOX.spam < $TMPMSG ;;
53 *)
54         # users may override normal delivery and have it go elsewhere
55         if test -r ~/.dc-dlvr.rc
56         then
57                 . ~/.dc-dlvr.rc
58         else
59                 $DELIVER -m INBOX < $TMPMSG
60         fi
61         ;;
62 esac
63
64 exec rm -f $rm_list