熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

sendmail中一種限定用戶郵箱大小的實用方法

2022-06-13   來源: Oracle 

  目前在Linux/Unix平台上Sendmail因成為缺省安裝的郵件服務器而得到非常廣泛的應用但是Sendmail本身並不具有限定用戶郵箱大小的功能所以如果某些用戶長時間不取信或設定了保留郵件副本其信件將在服務器上不斷堆積以致郵箱越來越大占用大量的硬盤空間很多網絡管理員對此都很有意見這裡介紹一種簡單實用的方法通過它我們可以很方便靈活地對用戶郵箱的大小進行設定
  
  一 基本思路
  
   先設定一個用戶郵箱大小的門限值;然後定期啟動一個進程檢查每一個用戶郵箱文件的大小將所有超過這一限值的郵箱文件名臨時寫進某一特定的文件中; 再讀取該文件將它寫進Sendmail 的黑名單(blacklist_recipients) 中從而使郵件服務器拒收該用戶的新郵件直到下次檢查時該郵箱大小已小於設定的門限值為止
  
  二運行環境
  
   我們以Solaris 操作系統為例進行說明其他Unix(或Linux)系統可參照來做
  
   本文以Sendmail 為例若無該版本的Sendmail運行軟件可到或 站點下載
  
  三具體操作
  
   . 下載編譯
   在Sendmail軟件包已下載到當前目錄後即可進行編譯操作步驟如下
   $ gzip dc sendmailtargz | tar xf (Gzip 是一個壓縮/解壓縮的工具相當於 Windows平台上的WinZip在網上能很容易地找到並下載)
   $ cd sendmail/sendmail
   $ /Build
   (編譯Sendmail )
  
   . 安裝
   # /Build install
   (用超級用戶身份安裝)
  
   . 生成配置文件
   # cd /cf/domain
   # vi genericm
   此時在文件的末尾增加如下兩行內容
   FEATURE(access_dbdbm /etc/mail/access)dnl
   FEATURE(blacklist_ recipients)dnl
   然後我們可以按著輸入以下內容
   # cd /cf
   # m /m/cfm /genericsolarismc > /sendmailcf
   # cp /sendmailcf /etc/mail/
  
   .生成 access 文件及郵件服務器名稱的參數文件
   # cd /etc/mail
   # makemap dbm access < /dev/null
   # vi localhostnames
   (該文件是一個文本文件內容為本地郵件服務器的域名和別名它們之間要用回車分隔詳見Readme文件的有關介紹)
  
   . 啟動Sendmail
   # /usr/lib/sendmail bd qm
  
   . 編緝限制郵箱大小的程序
   用sh命令編緝一個限制郵箱大小的程序然後用操作系統的定時執行功能crontab設定其執行的頻率內容如下
   # vi /etc/mail/limit_mailboxsh
   (內容見附錄)
   # chmod u+x /etc/mail/limit_mailboxsh
   # crontab e
  
   接著我們可以輸入以下內容
  
   * * * /etc/mail/limit_mailboxsh
  
   它表示在每天::每隔小時啟動一次檢查郵箱大小的sh命令用戶也可根據實際情況進行調整表示郵箱大小的門限值為MB
  
  四附錄limit_mailboxsh 源代碼
  
   #!/usr/bin/ksh
   # search the mailbox larger than MAXSIZE then set this mailbox full and reject new mails
  
  error() {
  echo $
  exit
  }
  BIN=/usr/bin
  MAIL=/etc/mail
  #Sendmail 參數文件所在的目錄
  MAILDIR=/var/mail
  #存放郵箱文件的目錄
  ACCESS=accessdb
  #用於臨時存放超過門限值的郵箱名
  SUBACCESS=accesssub
  #用於存放額外的收轉發限制規則
  if [ $# lt ]; then
  error Must set the MAX mailbox size with the command!
  fi
  if [ $ le ] ; 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 +$MAXSIZEc type f print; do
  case $box in
  ||/*pop)
  ;;
  *)
  mailuser=${box#/}
  echo To:$mailuser@
  ERROR: $mailusers Mailbox is full >> $MAIL/$ACCESS
  ;;
  esac
  done
  cd $MAIL || error entering $MAIL Failed
  /usr/sbin/makemap dbm access
  < /$ACCESS || error makemaping access Failed
  exit
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/18192.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.