- 论坛徽章:
- 1
|
利用Procmail如何过滤中文的附件
我只看 man page 或官網後學習的結果:
- PATH=$PATH
- SHELL=/bin/sh
- MAILDIR=/var/spool/mail
- VERBOSE=yes
- LOGABSTRACT=all
- SENDMAIL=/usr/sbin/sendmail
- LOGFILE=$HOME/procmail/procmail.log
- FILE=`echo $HOME`/procmail/mail_folder/mail-`date +%Y%m%d%H%I%S`-`echo $$`.eml
- tmp=`formail >; $FILE; chmod 644 $FILE`
- tmp=`formail -zxSubject:`
- SUBJ=`/etc/parser_subj "$tmp"| sed -e "s/[\$,\(,\),\',\\]//g"`
- FROM=`formail -zxFrom:| sed -e 's/.*<\(.*\)>;.*/\1/g'`
- SPAMID=`formail -I ""|grep '/sc?id=' | sed -e 's/.*id=\(.*\)/\1/g'`
- PTR=`formail -zxReceived:|grep ^from|sed -e 's/.*\[\(.*\)\.\(.*\)\.\(.*\)\.\(.*\)\].*/\4.\3.\2.\1/g'|head -1`
- MYSQL="mysql -h procmail.mydomain.net.tw -u abel -pxxxxxxxx procmail"
- # 從網頁取回來的信不再過濾
- :0 H
- * ^X-resend:
- /var/spool/mail/$LOGNAME
- # 白名單處理
- WHITE_LIST=`echo "SELECT WHITE_NAME FROM WHITE_LIST WHERE USERNAME='$LOGNAME' AND instr('$FROM', WHITE_NAME ) or instr('$SUBJ', WHITE_NAME )"| $MYSQL | tr '\n' '|' ; echo "aaaaaaaazzzzzzzzzggggggggg"`
- :0 H
- * $($WHITE_LIST)
- $ORGMAIL
- # 標?#125;中巳帶有 SPAM
- :0 HD
- * ^Subject: SPAM.*
- {
- :0 fw
- | ( echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','SPAM','標?#125; SPAM')" | $MYSQL)
- :0
- /dev/null
- }
- # 發信不為自己單位但 Message-ID 帶自己
- :0 HD
- * !^From: .*@mydomain.net.tw.*
- * !^Received: .*211\.72\.21[0-1]\..*
- * ^Message-Id: .*@mydomain.net.*
- {
- :0 fw
- | echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','發信軟體','Message-ID 為 mydomain')" | $MYSQL
- :0
- /dev/null
- }
- # spamcop 的檢舉信回函轉存 mysql, 再以程式去 submit form
- :0 H
- * ^Subject: .*SpamCop has accepted.*
- {
- :0 fw
- | ( echo "insert into SPAMCOP_ID(SPAM_ID) values('$SPAMID')" | $MYSQL)
- :0
- /dev/null
- }
- # 一些大的廣告信商
- :0 HD
- * (^From:|^Received:|Return-Path:) .*(mailserver.idv.tw|mailserver.com|worldad.net|mailnews.com.tw|rayman.com.cn).*
- {
- :0 fw
- | echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','發信軟體','mailserver 信商發出')" | $MYSQL
- :0
- /dev/null
- }
- # 收信人為數字型態
- :0 HD
- * ^To: .*[0-9][0-9].txt.*
- {
- :0 fw
- | echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','發信軟體','數字型收件者')" | $MYSQL
- :0
- /dev/null
- }
- # From: user@mydomain.net.tw 但不為自己人
- :0 HD
- * ^From: .*@mydomain.net.tw.*
- * !^Received: .*211\.72\.21[0-1]\..*
- {
- :0 fw
- | (username=${FROM%%@*};if [ -d /home/$username ] ; then formail -A "Bogus: No"; else formail -A "Bogus: Yes"; echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','寄件人不存在','$FROM ')" | $MYSQL ;fi );
- :0
- * ^Bogus: Yes
- /dev/null
- }
- # 主旨過濾,資料存?mysql
- :0 HD
- * ! ^From: .*@mydomain.net.tw.*
- {
- patten=`echo "select concat(\"'\",PATTEN,\"'\") from SPAM_PATTEN where USERNAME='$LOGNAME' and instr('$SUBJ',PATTEN)"|$MYSQL | grep -v 'PATTEN'| tr '\n' ','`
- patten2=`echo $patten | sed -e "s/'//g"`
- :0 fw
- * ? test -n "$patten"
- | ( formail -A "Spam: $patten" ; \
- echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','符合特定字串','$patten2'); update SPAM_PATTEN set CNT=CNT+1 where USERNAME='$LOGNAME' and PATTEN in ($patten ''); " | $MYSQL ;\
- )
- :0
- * ^Spam: .*
- /dev/null
- }
- # RBL 過濾, rbl doamin 存於 mysql
- :0
- * ! ^From: .*@(mydomain.net.tw|mydomain.net).*
- * ! ^Received: .*159\.226\.*
- {
- rbl=`for spam in $(echo "select RBL_DOMAIN from SPAM_SOURCE order by SN"| $MYSQL | grep -v 'RBL_DOMAIN'); do rbl=$(host $PTR.$spam| grep 'has address'); test -n "$rbl" && echo $PTR.$spam && break; done`
- :0 fw
- |( test -n "$rbl" && (echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM ','$TO ','$SUBJ ','$FILE',1,'$LOGNAME','來自 RBL IP','$rbl.$spam')" | $MYSQL) && formail -A "Spam: From_RBL $rbl.$spam" )
- :0
- * ^Spam: .*
- /dev/null
- }
复制代码
結果呈現:
http://211.72.210.251/spamcop.html
最近30天:
來自 RBL IP 5061 25.31%
寄件人不存在 911 4.56%
符合特定字串 3845 19.23%
發信軟體 10166 50.84% |
|