rpsieve (1327B)
1 #!/bin/sh 2 # 3 # Copy me if you can 4 # by parazyd 5 # 6 7 profile="${RPPROFILE:-$HOME/.rp/default}" 8 9 usage() { 10 cat <<EOF 11 * Usage: $(basename $0) [-e] [-u] [-v] 12 -e: edit filters.txt before continuing 13 -u: upload filters.sieve when done 14 -v; be verbose 15 EOF 16 exit 1 17 } 18 19 while getopts "euvh" opt; do 20 case "$opt" in 21 e) 22 ed=true 23 ;; 24 u) 25 upload=true 26 ;; 27 v) 28 verbose="-v" 29 ;; 30 *) 31 usage 32 ;; 33 esac 34 done 35 36 ft="$profile/filters.txt" 37 fs="$profile/filters.sieve" 38 ab="$profile/whitelist.abook" 39 40 [ -n "$ed" ] && vim "$ft" 41 42 [ -f "$ft" ] || { 43 echo "* No filters.txt file" 44 exit 1 45 } 46 [ -f "$ab" ] || { 47 echo "* No whitelist.abook file" 48 exit 1 49 } 50 51 echo "* Generating sieve rules" 52 cat > "$fs" << EOF 53 # mailbox supports fileinto :create 54 require ["fileinto","mailbox","variables"]; 55 56 # bounces 57 if header :contains "Sender" "mailman-bounce" { 58 fileinto :create "zz.bounces"; 59 stop; 60 } 61 62 # own filters 63 EOF 64 65 { 66 rohrpost rpsieve $verbose < "$ft" 67 rohrpost rpsieve $verbose < "$ab" 68 } >> "$fs" 69 70 cat >> "$fs" << EOF 71 # spam 72 if header :is "X-Spam-Flag" "YES" { fileinto :create "zz.spam"; stop; } 73 74 # everything else 75 fileinto :create "unsorted"; 76 EOF 77 78 if [ -n "$upload" ]; then 79 echo "* Uploading filters.sieve" 80 host=t3.dyne.org 81 path=/var/vmail/sieve-scripts/"$(readlink "$profile")" 82 scp "$fs" "$host:$path" || { 83 echo "* Upload failed" 84 exit 1 85 } 86 fi