sendmail中一種限定使用者郵箱大小的實用方法(轉)
sendmail中一種限定使用者郵箱大小的實用方法(轉)[@more@] 目前,在Linux/Unix平臺上,Sendmail因成為預設安裝的郵件伺服器而得到非常廣泛的應用。但是Sendmail本身並不具有限定使用者郵箱大小的功能,所以,如果某些使用者長時間不取信或設定了保留郵件副本,其信件將在伺服器上不斷堆積,以致郵箱越來越大,佔用大量的硬碟空間,很多網路管理員對此都很有意見。這裡介紹一種簡單實用的方法,透過它,我們可以很方便靈活地對使用者郵箱的大小進行設定。
一、 基本思路
---- 先設定一個使用者郵箱大小的門限值;然後定期啟動一個程式,檢查每一個使用者郵箱檔案的大小,將所有超過這一限值的郵箱檔名臨時寫進某一特定的檔案中; 再讀取該檔案,將它寫進Sendmail 的黑名單(blacklist_recipients) 中,從而使郵件伺服器拒收該使用者的新郵件,直到下次檢查時該郵箱大小已小於設定的門限值為止。
二、執行環境
---- 我們以Solaris 2.7作業系統為例進行說明,其他Unix(或Linux)系統可參照來做。
---- 本文以Sendmail 8.11.3為例,若無該版本的Sendmail執行軟體,可到或 站點下載。
三、具體操作
---- 1. 下載編譯
---- 在Sendmail軟體包已下載到當前目錄後即可進行編譯,操作步驟如下。
---- $ gzip -dc sendmail.8.11.3.tar.gz | tar -xf - (Gzip 是一個壓縮/解壓縮的工具,相當於 Windows平臺上的WinZip,在網上能很容易地找到並下載)
---- $ cd sendmail-8.11.3/sendmail
---- $ ./Build
---- (編譯Sendmail )
---- 2. 安裝
---- # ./Build install
---- (用超級使用者身份安裝)
---- 3. 生成配置檔案
---- # cd ../cf/domain
---- # vi generic.m4
---- 此時,在檔案的末尾增加如下兩行內容。
---- FEATURE('access_db','dbm /etc/mail/access')dnl
---- FEATURE('blacklist_ recipients')dnl
---- 然後,我們可以按著輸入以下內容。
---- # cd ../cf
---- # m4 ../m4/cf.m4 ./generic-solaris2.mc > ./sendmail.cf
---- # cp ./sendmail.cf /etc/mail/
---- 4.生成 access 檔案及郵件伺服器名稱的引數檔案
---- # cd /etc/mail
---- # makemap dbm access < /dev/null
---- # vi local-host-names
---- (該檔案是一個文字檔案,內容為本地郵件伺服器的域名和別名,它們之間要用回車分隔。詳見Readme檔案的有關介紹)
---- 5. 啟動Sendmail
---- # /usr/lib/sendmail -bd -q30m
---- 6. 編緝限制郵箱大小的程式
---- 用sh命令編緝一個限制郵箱大小的程式,然後用作業系統的定時執行功能crontab設定其執行的頻率,內容如下。
---- # vi /etc/mail/limit_mailbox.sh
---- (內容見附錄)
---- # chmod u+x /etc/mail/limit_mailbox.sh
---- # crontab -e
---- 接著,我們可以輸入以下內容。
---- 0 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /etc/mail/limit_mailbox.sh 10
---- 它表示在每天6:00~20:00間,每隔1小時啟動一次,檢查郵箱大小的sh命令。使用者也可根據實際情況進行調整。“10”表示郵箱大小的門限值為10MB。
四、附錄limit_mailbox.sh 原始碼
---- #!/usr/bin/ksh
---- # search the mailbox larger than MAXSIZE , then set this mailbox full and reject new mails
error() {
echo " $1 "
exit 1
}
BIN=/usr/bin
MAIL=/etc/mail
#Sendmail 引數檔案所在的目錄
MAILDIR=/var/mail
#存放郵箱檔案的目錄
ACCESS=access.db
#用於臨時存放超過門限值的郵箱名
SUBACCESS=access.sub
#用於存放額外的收、轉發限制規則
if [ $# -lt 1 ]; then
error "Must set the MAX mailbox size with the command!"
fi
if [ $1 -le 0 ] ; then
error " Mailbox Size < 0, Failed"
fi
((MAXSIZE=$1*1024*1024))
if [ -f $MAIL/$SUBACCESS ]; then
$BIN/cat $MAIL/$SUBACCESS > $MAIL/$ACCESS ' '
error "piping $MAIL/$SUBACCESS into $MAIL/$ACCESS, Failed"
else
> $MAIL/$ACCESS' 'error "clearing $MAIL/$ACCESS, Failed"
fi
cd $MAILDIR' 'error "entering $MAILDIR Failed"
for box in '$BIN/find .
! -user root -size +"$MAXSIZE"c -type f -print'; do
case $box in
.|..|./.*.pop)
;;
*)
mailuser=${box#./}
echo "To:$mailuser@
ERROR:550 $mailuser's Mailbox is full " >> $MAIL/$ACCESS
;;
esac
done
cd $MAIL || error " entering $MAIL Failed"
/usr/sbin/makemap dbm access
< ./$ACCESS || error "makemaping access Failed"
exit 0'
一、 基本思路
---- 先設定一個使用者郵箱大小的門限值;然後定期啟動一個程式,檢查每一個使用者郵箱檔案的大小,將所有超過這一限值的郵箱檔名臨時寫進某一特定的檔案中; 再讀取該檔案,將它寫進Sendmail 的黑名單(blacklist_recipients) 中,從而使郵件伺服器拒收該使用者的新郵件,直到下次檢查時該郵箱大小已小於設定的門限值為止。
二、執行環境
---- 我們以Solaris 2.7作業系統為例進行說明,其他Unix(或Linux)系統可參照來做。
---- 本文以Sendmail 8.11.3為例,若無該版本的Sendmail執行軟體,可到或 站點下載。
三、具體操作
---- 1. 下載編譯
---- 在Sendmail軟體包已下載到當前目錄後即可進行編譯,操作步驟如下。
---- $ gzip -dc sendmail.8.11.3.tar.gz | tar -xf - (Gzip 是一個壓縮/解壓縮的工具,相當於 Windows平臺上的WinZip,在網上能很容易地找到並下載)
---- $ cd sendmail-8.11.3/sendmail
---- $ ./Build
---- (編譯Sendmail )
---- 2. 安裝
---- # ./Build install
---- (用超級使用者身份安裝)
---- 3. 生成配置檔案
---- # cd ../cf/domain
---- # vi generic.m4
---- 此時,在檔案的末尾增加如下兩行內容。
---- FEATURE('access_db','dbm /etc/mail/access')dnl
---- FEATURE('blacklist_ recipients')dnl
---- 然後,我們可以按著輸入以下內容。
---- # cd ../cf
---- # m4 ../m4/cf.m4 ./generic-solaris2.mc > ./sendmail.cf
---- # cp ./sendmail.cf /etc/mail/
---- 4.生成 access 檔案及郵件伺服器名稱的引數檔案
---- # cd /etc/mail
---- # makemap dbm access < /dev/null
---- # vi local-host-names
---- (該檔案是一個文字檔案,內容為本地郵件伺服器的域名和別名,它們之間要用回車分隔。詳見Readme檔案的有關介紹)
---- 5. 啟動Sendmail
---- # /usr/lib/sendmail -bd -q30m
---- 6. 編緝限制郵箱大小的程式
---- 用sh命令編緝一個限制郵箱大小的程式,然後用作業系統的定時執行功能crontab設定其執行的頻率,內容如下。
---- # vi /etc/mail/limit_mailbox.sh
---- (內容見附錄)
---- # chmod u+x /etc/mail/limit_mailbox.sh
---- # crontab -e
---- 接著,我們可以輸入以下內容。
---- 0 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /etc/mail/limit_mailbox.sh 10
---- 它表示在每天6:00~20:00間,每隔1小時啟動一次,檢查郵箱大小的sh命令。使用者也可根據實際情況進行調整。“10”表示郵箱大小的門限值為10MB。
四、附錄limit_mailbox.sh 原始碼
---- #!/usr/bin/ksh
---- # search the mailbox larger than MAXSIZE , then set this mailbox full and reject new mails
error() {
echo " $1 "
exit 1
}
BIN=/usr/bin
MAIL=/etc/mail
#Sendmail 引數檔案所在的目錄
MAILDIR=/var/mail
#存放郵箱檔案的目錄
ACCESS=access.db
#用於臨時存放超過門限值的郵箱名
SUBACCESS=access.sub
#用於存放額外的收、轉發限制規則
if [ $# -lt 1 ]; then
error "Must set the MAX mailbox size with the command!"
fi
if [ $1 -le 0 ] ; then
error " Mailbox Size < 0, Failed"
fi
((MAXSIZE=$1*1024*1024))
if [ -f $MAIL/$SUBACCESS ]; then
$BIN/cat $MAIL/$SUBACCESS > $MAIL/$ACCESS ' '
error "piping $MAIL/$SUBACCESS into $MAIL/$ACCESS, Failed"
else
> $MAIL/$ACCESS' 'error "clearing $MAIL/$ACCESS, Failed"
fi
cd $MAILDIR' 'error "entering $MAILDIR Failed"
for box in '$BIN/find .
! -user root -size +"$MAXSIZE"c -type f -print'; do
case $box in
.|..|./.*.pop)
;;
*)
mailuser=${box#./}
echo "To:$mailuser@
ERROR:550 $mailuser's Mailbox is full " >> $MAIL/$ACCESS
;;
esac
done
cd $MAIL || error " entering $MAIL Failed"
/usr/sbin/makemap dbm access
< ./$ACCESS || error "makemaping access Failed"
exit 0'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-948697/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用sendmail傳送HTML格式的郵件(轉)AIHTML
- 使用者註冊郵箱驗證啟用思路【轉】
- 怎麼登陸163郵箱?163的郵箱有哪些實用技巧?
- git配置使用者名稱和郵箱 git設定使用者名稱郵箱有什麼用Git
- jQuery的Ajax方法實現註冊郵箱時使用者名稱查詢jQuery
- 手機號/郵箱 用*替代實現
- win10郵件同步163郵箱的方法_win10郵件怎麼繫結163郵箱實現同步Win10
- 更新Apple id郵箱以及常用海外郵箱使用/設定方法APP
- 在Perl中使用sendmail傳送MIME郵件 (轉)AI
- 郵箱地址校驗方法探究
- 電子郵箱是qq郵箱嗎 電子郵箱和qq郵箱的區別聯絡介紹
- 正規表示式的應用實現郵箱輸入
- Git使用者名稱郵箱配置Git
- Outlook如果有多個郵箱,個別郵箱設定不接收郵件的設定方法
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- 微信檔案如何快速轉至郵箱?微信檔案如何快速轉至郵箱教程
- 對POP3郵箱中的新郵件的判斷方法
- Exchange批量建立使用者組及啟用通訊組郵箱
- 實現郵箱的已讀回執
- git使用者名稱和郵箱配置Git
- 剔除垃圾 妙用郵箱的遠端管理(轉)
- 註冊時,給使用者郵箱傳送啟用連結(java 傳送郵件)Java
- Laravel 實現使用者名稱 + 郵箱 + 手機號登入Laravel
- git設定使用者名稱和郵箱Git
- git 設定使用者名稱和郵箱Git
- ipf導致sendmail不能正確轉發郵件的問題解決AI
- gitlab郵箱驗證 郵箱提醒設定Gitlab
- Python 中一種輕鬆實現併發程式設計的方法Python程式設計
- pandas筆記(三)-- 查詢有效郵箱的使用者(正規表示式應用)筆記
- [應用案例]onethink郵箱找回密碼功能已實現密碼
- 修改git全部已提交的使用者名稱和郵箱Git
- qq郵箱怎麼發檔案給別的郵箱 qq郵箱如何將文件傳送給別人
- ts - 兩種方法實現忽略大小寫的字串排序字串排序
- win10自帶郵件怎麼新增qq郵箱_win10郵箱如何匯入qq郵箱Win10
- 如何傳送電子郵件到別人郵箱?電子郵件傳送的方法
- Git修改和配置使用者名稱和郵箱Git
- js實現的郵箱格式驗證程式碼JS
- win10自帶郵件系統繫結企業郵箱的方法Win10