浏览模式: 标准 | 列表

最近管理邮件系统时发现几个问题,一个是有些用户设置了转发,但是转发地址有问题,经常因为退信而塞爆邮箱(有邮箱限额),之后的邮件都会被塞到等待队列里。还有就是有许多寄到本地虚拟域的信没有对应的用户,按说 Postfix 应该不会投递这类邮件,但是实际情况是它交给 maildrop 投递,而 maildrop 发现没有该用户,报告指定用户非法,这时正确的动作应该是退信,不过可能是我用的版本太低,maildrop 没有退信,而是把它放到等待队列里等待下次再试。这样等待队列里经常会有大量的这种邮件。所以,要想办法把这些邮件都清除掉。

在《Postfix 权威指南》里有一个叫 pfdel 的 Perl 小程序,可以用它删除指定邮件地址的邮件(不管是发信人还是收信人的邮件地址),这个虽然方便,但是如果想要清除因为 maildir over quota 或者 Invalid user specified 错误而产生的邮件,还需要修改一下。下面是这四个程序:


  • pfdel.pl
  • luserdel.pl
  • moqdel.pl
  • jmoqdel.pl

 

其中,pfdel.pl 是用来删除队列中指定用户的邮件的,luserdel.pl 是用来删除队列中无效用户的邮件的,moqdel.pl 是用来删除队列中邮箱配额已满的用户的邮件的,jmoqdel.pl 是删除邮箱配额已满的用户的垃圾邮件箱的。

我现在把 luserdel.pl 放到 crontab 里,每天晚上清理一次,终于可以高枕无忧了。

» 阅读全文

 

 

 

  • 软件列表
  • 操作系统安装
  • Postfix, Courier, MySQL, phpMyAdmin 安装
  • 为 Postfix/Courier 及 Extmail 创建 MySQL 数据库
  • 配置 Postfix 基本参数
  • 配置 Postfix 虚拟帐号
  • 配置 Courier Server
  • 为 Courier Server 重新生成 SSL 证书
  • 配置 Postfix SASL 验证
  • 配置 Postfix TLS
  • 配置 Amavisd-new, SpamAssassin 和 ClamAV
  • 安装 Razor,Pyzor 和 DCC 并配置 SpamAssassin
  • 为 SpamAssassin 添加过滤规则
  • 编译支持 MySQL 用户的 maildrop
  • 配置 maildrop 邮件分拣
  • 配置 extmail 和 extman
  • 配置 extman 中的图形日志
  • 安装 Spam Locker 反垃圾邮件
  • 防火墙配置
  • 参考文献

     

     

     

  • » 阅读全文

    原创作品,转载请注明出处。

    在 ubuntu 6.06 LTS server 上安装 Helix Mobile Server 一文中给出了 ubuntu 上的启动管理脚本,这里再给一个 debian 的启动管理脚本。感觉 Helix Mobile Server 在 debian sarge 上运行效果更好。

    helix
    1. #! /bin/sh
    2. set -e
    3.  
    4. # /etc/init.d/helix: start and stop the Helix Mobile Server daemon
    5.  
    6. HELIX_HOME=/opt/helix
    7.  
    8. if test -f /etc/helix.conf; then
    9.     . /etc/helix.conf
    10. fi
    11.  
    12. test -x $HELIX_HOME/Bin/rmserver || exit 0
    13. ( $HELIX_HOME/Bin/rmserver -h 2>&1 | grep -q Helix ) 2>/dev/null || exit 0
    14.  
    15. check_for_helix_stop() {
    16.     ( ps -A | grep -q `cat $HELIX_HOME/Logs/rmserver.pid` ) 2>/dev/null || return 0
    17.     return 1
    18. }
    19.  
    20. check_for_helix_start() {
    21.     ( ps -A | grep -q `cat $HELIX_HOME/Logs/rmserver.pid` ) 2>/dev/null || return 1
    22.     return 0
    23. }
    24.  
    25. helix_failed() {
    26.     echo "[failure]"
    27.     exit 1
    28. }
    29.  
    30. export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
    31.  
    32. case "$1" in
    33.   start)
    34.         echo -n "Starting Helix Mobile Server..."
    35.         check_for_helix_start || start-stop-daemon --start --quiet --background --exec $HELIX_HOME/Bin/rmserver -- $HELIX_HOME/rmserver.cfg || helix_failed
    36.         echo "[ok]"
    37.         ;;
    38.   stop)
    39.         echo -n "Stopping Helix Mobile Server..."
    40.         check_for_helix_stop || start-stop-daemon --stop --quiet --oknodo --pidfile $HELIX_HOME/Logs/rmserver.pid || helix_failed
    41.         echo "[ok]"
    42.         ;;
    43.  
    44.   reload|force-reload)
    45.         echo -n "Reloading Helix Mobile Server..."
    46.         check_for_helix_stop || start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile $HELIX_HOME/Logs/rmserver.pid --exec $HELIX_HOME/Bin/rmserver || helix_failed
    47.         check_for_helix_start || start-stop-daemon --start --quiet --background --exec $HELIX_HOME/Bin/rmserver -- $HELIX_HOME/rmserver.cfg || helix_failed
    48.         echo "[ok]"
    49.         ;;
    50.  
    51.   restart)
    52.         echo -n "Restarting Helix Mobile Server..."
    53.         check_for_helix_stop || start-stop-daemon --stop --quiet --oknodo --pidfile $HELIX_HOME/Logs/rmserver.pid || helix_failed
    54.         check_for_helix_start || start-stop-daemon --start --quiet --background --exec $HELIX_HOME/Bin/rmserver -- $HELIX_HOME/rmserver.cfg || helix_failed
    55.         echo "[ok]"
    56.         ;;
    57.  
    58.   *)
    59.         echo "Usage: /etc/init.d/helix {start|stop|reload|force-reload|restart}"
    60.         exit 1
    61. esac
    62.  
    63. exit 0

    » 阅读全文

    最近 CoolCode.CN 的服务器又换了,从浪潮的服务器换到了 hp 的服务器,比原来多了一个光纤存储,虽然不是很大,但也有 500 多 G 的空间了。所以,打算把原来学校的 debian 镜像站点换到这台机器上,因为原来放学校 debian 镜像站点的服务器空间很小,只有 60 多 G,不能做完全镜像。现在好了,可以做个完全的镜像了。这台服务器是 Windows 2003 + IIS 6 做的虚拟主机,目前好像还没有任何 debian 和 ubuntu 镜像站点是基于 Windows 系统的,我这也算是前无古人了,而且,网上也没有这方面的资料可以查,所以,我打算把如何来用 Windows 2003 + IIS 6 作 debian 和 ubuntu 的镜像站的过程写下来,希望对有同样需要的朋友有所帮助。

    » 阅读全文

    同时安装这两个版本的 PHP,主要是为了测试程序。在 ubuntu 上安装 PHP 很简单,用 apt-get 一下子就安装好了。为了能同时测试 PHP4 和 PHP5 的程序,我安装了两个 apache,一个是 apache 1.3,另一个 apache 2,用 apache 1.3 跑 PHP4,用 apache 2 跑 PHP5,为了不让他们冲突,我把 apache2 的端口号改成了 81。安装非常简单:

    sudo apt-get install apache2 libapache2-mod-php5 php5

    这样就把 PHP 5 安装好了,之后修改 apache2 的端口号为 81,并重启该服务。然后安装 PHP4:

    sudo apt-get install apache libapache-mod-php4 php4

    如果安装好之后,apache 上不能运行 PHP 程序,可能是配置文件的问题,只要把 PHP4 的 apache 模块加载语句添加到 apache 的配置文件里就好了。

    上面这些都很容易。下面该安装开发包了,我装这个东西主要是为了测试我写的 xxtea 的 PECL 扩展是否能在这两个版本的 PHP 上都编译通过。顺便安装一个 PHP 的 CLI 版。

    sudo apt-get install php4-cli php4-dev
    sudo apt-get install php5-cli php5-dev

    执行上面两句之后,这两个版本的开发包和命令行版本也就都安装好了,不过有个问题,默认的 php、php-config 和 phpize 等程序的连接都是指向 PHP5 上的,也就是说如果你要编译 PHP 模块,它总是会用 PHP 5 的开发包来编译。所以,我写了一个切换 PHP 版本的脚本,用它可以很方便的在 PHP4 和 PHP 5 之间切换:

    switchphp
    #!/bin/sh
    CURRENT_PWD=`pwd`
    cd /etc/alternatives
    sudo rm php*
    sudo ln -s /usr/bin/php$1 php
    sudo ln -s /usr/share/man/man1/php$1.1.gz php.1.gz
    sudo ln -s /usr/bin/php-config$1 php-config
    sudo ln -s /usr/share/man/man1/php-config$1.1.gz php-config.1.gz
    sudo ln -s /usr/bin/phpize$1 phpize
    sudo ln -s /usr/share/man/man1/phpize$1.1.gz phpize.1.gz
    cd $CURRENT_PWD

    下载以后,放在 /usr/bin 目录下,设置属性为 755,就可以了。使用它切换 PHP 版本时,只需要在命令后面跟上版本号就可以了。例如要切换到 PHP 4,只需要执行:

    switchphp 4

    就可以了。

    » 阅读全文