| #!/bin/sh |
| # Copyright (C) 2008-2014, Eric Wong <e@80x24.org> |
| # License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt> |
| # Usage: report-spam /path/to/message/in/maildir |
| # This is intended for use with incron or similar systems. |
| # my incrontab(5) looks like this: |
| # /path/to/maildir/.INBOX.good/cur IN_MOVED_TO /path/to/report-spam $@/$# |
| # /path/to/maildir/.INBOX.spam/cur IN_MOVED_TO /path/to/report-spam $@/$# |
| |
| # gigantic emails tend not to be spam (but they suck anyways...) |
| bytes=$(stat -c %s $1) |
| if test $bytes -gt 512000 |
| then |
| exit |
| fi |
| |
| # Only tested with the /usr/sbin/sendmail which ships with postfix |
| # *** Why not call spamc directly in this script? *** |
| # I route this through my MTA so it gets queued properly. |
| # incrond has no concurrency limits and will fork a new process on |
| # every single event, which sucks with rename storms when a client |
| # commits folder changes. The sendmail executable exits quickly and |
| # queues up the message for training. This should also ensure fairness |
| # to newly arriving mail. Instead of installing/configuring |
| # another queueing system, I reuse the queue in the MTA. |
| # See scripts/dc-dlvr for corresponding trainspam/trainham handlers, |
| # which are for my personal bayes training, and scripts/dc-dlvr.pre |
| # for the pispam/piham handlers for training emails going to public-inbox |
| |
| DO_SENDMAIL='/usr/sbin/sendmail -oi' |
| PI_USER=pi |
| |
| case $1 in |
| *[/.]spam/cur/*) # non-new messages in spam get trained |
| $DO_SENDMAIL $PI_USER+pispam <$1 |
| exec $DO_SENDMAIL $USER+trainspam <$1 |
| ;; |
| *:2,*S*) # otherwise, seen messages only |
| case $1 in |
| *:2,*T*) exit 0 ;; # ignore trashed messages |
| esac |
| $DO_SENDMAIL $PI_USER+piham <$1 |
| exec $DO_SENDMAIL $USER+trainham <$1 |
| ;; |
| esac |