ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 9789|回复: 3
打印 上一主题 下一主题

关于sendmail邮箱大小限制的问题

[复制链接]
跳转到指定楼层
顶楼
发表于 2005-11-7 18:32:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老大:<br>
小弟近日开始学习Linux,在配置sendmail的时候看了一篇别人写的帖子,描述如何限制大小。<br>
在sendmail中实现邮箱大小设置<br>
<br>
<br>
  在Linux/Unix平台上,Sendmail邮件服务器得到广泛应用。但是Sendmail本身并不具有限定用户邮箱大小的功能。如果用户长时间不取信或设定了保留邮件副本,其信件将在服务器上不断堆积,以致邮箱越来越大,占用大量的硬盘空间。当然,我们是可以很方便灵活地对用户邮箱的大小进行设定的。<br>
<br>
  如果我们可以设定一个用户邮箱大小的门限值,然后定期启动一个进程,检查每一个用户邮箱文件的大小,将所有超过这一限值的邮箱文件名临时写进某一特定的文件中,再读取该文件,将它写进Sendmail 的黑名单(blacklist_recipients) 中,从而使邮件服务器拒收该用户的新邮件,直到下次检查时该邮箱大小已小于设定的门限值为止。<br>
  以Solaris 2.7/Sendmail 8.11.3为例进行说明,其他系统可参照来做。<br>
  在Sendmail软件包已下载到当前目录后即可进行编译,操作步骤如下。<br>
  $ gzip -dc sendmail.8.11.3.tar.gz | tar -xf –<br>
  $ cd sendmail-8.11.3/sendmail<br>
  $ ./Build(编译Sendmail )<br>
  用超级用户身份安装并生成配置文件:<br>
  # ./Build install()<br>
  # cd ../cf/domain<br>
  # vi generic.m4<br>
  此时,在文件的末尾增加如下两行内容:<br>
  FEATURE('access_db','dbm /etc/mail/access')dnl<br>
  FEATURE('blacklist_ recipients')dnl<br>
  然后,我们可以按着输入以下内容:<br>
  # cd ../cf<br>
  # m4 ../m4/cf.m4 ./generic-solaris2.mc > ./sendmail.cf<br>
  # cp ./sendmail.cf /etc/mail/<br>
  生成 access 文件及邮件服务器名称的参数文件:<br>
  # cd /etc/mail<br>
  # makemap dbm access < /dev/null<br>
  # vi local-host-names<br>
  现在启动Sendmail:<br>
  # /usr/lib/sendmail -bd -q30m<br>
  编缉限制邮箱大小的程序要用sh命令编缉一个限制邮箱大小的程序,然后用操作系统的定时<br>
执行功能crontab设定其执行的频率。<br>
  # vi /etc/mail/limit_mailbox.sh<br>
  # chmod u+x /etc/mail/limit_mailbox.sh<br>
  # crontab –e<br>
  接着,我们可以输入以下内容。<br>
  0 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /etc/mail/<br>
limit_mailbox.sh 10<br>
  它表示在每天6:00~20:00间,每隔1小时启动一次,检查邮箱大小的sh命令。用户也可根据<br>
实际情况进行调整。“10”表示邮箱大小的门限值为10MB。<br>
  limit_mailbox.sh 源代码如下:<br>
  #!/usr/bin/ksh<br>
  # search the mailbox larger than MAXSIZE , then set this mailbox full and<br>reject new mails<br>
  error() {<br>
  echo " $1 "<br>
  exit 1<br>
  }<br>
  BIN=/usr/bin<br>
  MAIL=/etc/mail<br>
  #Sendmail 参数文件所在的目录<br>
  MAILDIR=/var/mail<br>
  #存放邮箱文件的目录<br>
  ACCESS=access.db <br>
  #用于临时存放超过门限值的邮箱名<br>
  SUBACCESS=access.sub<br>
  #用于存放额外的收、转发限制规则<br>
  if [ $# -lt 1 ]; then<br>
  error "Must set the MAX mailbox size with the command!"<br>
  fi<br>
  if [ $1 -le 0 ] ; then <br>
  error " Mailbox Size < 0, Failed" <br>
  fi<br>
  ((MAXSIZE=$1*1024*1024)) <br>
  if [ -f $MAIL/$SUBACCESS ]; then<br>
  $BIN/cat $MAIL/$SUBACCESS > $MAIL/$ACCESS ' '<br>
  error "piping $MAIL/$SUBACCESS into $MAIL/$ACCESS, Failed"<br>
  else<br>
  > $MAIL/$ACCESS' 'error "clearing $MAIL/$ACCESS, Failed"<br>
  fi<br>
  cd $MAILDIR' 'error "entering $MAILDIR Failed"<br>
  for box in '$BIN/find .<br>
  ! -user root -size +"$MAXSIZE"c -type f -print'; do<br>
  case $box in<br>
  .|..|./.*.pop)<br>
  ;;<br>
  *)<br>
  mailuser=${box#./}<br>
  echo "To:$mailuser@ <br>
  ERROR:550 $mailuser's Mailbox is full " >> $MAIL/$ACCESS<br>
  ;;<br>
  esac<br>
  done<br>
  cd $MAIL || error " entering $MAIL Failed"<br>
  /usr/sbin/makemap dbm access <br>
  < ./$ACCESS || error "makemaping access Failed"<br>
  exit 0'<br>
<br>
小弟想问的是:limit_mailbox.sh 还需要处理吗?如何处理?<br>
QQ:43238675<br>
MSN:fushuiwa@hotmail.com
沙发
发表于 2006-11-10 15:13:04 | 只看该作者
感谢 zhw6900203 有关限制收发邮件大小的方法。

我在 Solaris10 上试过一下,不工作。

sendmail.cf 的位置是:/usr/lib/mail/cf/sendmail.cf

请赐教,我真的需要这项功能。

注:有关邮箱大小的设置我没有做,不知其有没有相关性。


谢谢。
藤椅
发表于 2006-12-6 16:36:48 | 只看该作者
2楼的没有看清人家的问题,楼主问得是限制邮箱的大小,实际上免费的sendmail是没有限制邮箱大小的功能的
,不过可以用磁盘配额实现
板凳
发表于 2007-12-24 17:44:33 | 只看该作者
那超过配额就不能用了,linux客户端quotas可以设soft 那如果client是windows怎么办,总不见得每次跟老板解释技术吧。
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-12-26 19:55

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表