当前位置:操作系统 > Unix/Linux >>

sendmail中一种限定用户邮箱大小的实用方法

sendmail中一种限定用户邮箱大小的实用方法

  内容:

  --------------------------------------------------------------------------------

  目前,在Linux/Unix平台上,Sendmail因成为缺省安装的邮件服务器而得到非常广泛的应用。但是Sendmail本身并不具有限定用户邮箱大小的功能,所以,如果某些用户长时间不取信或设定了保留邮件副本,其信件将在服务器上不断堆积,以致邮箱越来越大,占用大量的硬盘空间,很多网络管理员对此都很有意见。这里介绍一种简单实用的方法,通过它,我们可以很方便灵活地对用户邮箱的大小进行设定。

  一、 基本思路

  ---- 先设定一个用户邮箱大小的门限值;然后定期启动一个进程,检查每一个用户邮箱文件的大小,将所有超过这一限值的邮箱文件名临时写进某一特定的文件中; 再读取该文件,将它写进Sendmail 的黑名单(blacklist_recipients) 中,从而使邮件服务器拒收该用户的新邮件,直到下次检查时该邮箱大小已小于设定的门限值为止。

  二、运行环境

  ---- 我们以Solaris 2.7操作系统为例进行说明,其他Unix(或Linux)系统可参照来做。

  ---- 本文以Sendmail 8.11.3为例,若无该版本的Sendmail运行软件,可到http://freesoft.cei.gov.cn或 http://www.sendmail.org站点下载。

  三、具体操作

  ---- 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'本文来自:http://www.xiaoyaxiao.com/4272.html
发表您的高见!
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,