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