主题: 分享一个删除过期邮件的php脚本

主要目的是:
1、对于企业来说,在员工手册里加一条,如果条件许可,每天需要使用邮件客户端软件收取邮件,这样是很方便的。
      所以,对于时间长的邮件,放在邮件服务器上,是对服务器空间的浪费。
2、长时间不删除邮件,也会造成员工的邮箱爆满,超出 Quota。
3、所以我写了一个这样的脚本,对于正常的邮件目录,1个月之前的文件删除,对于垃圾邮件目录,7天之前的文件删除。
主要的方法就是先读取 mysql 的用户数据,获得用户的目录数据,
然后对用户目录下的邮件目录进行遍历,检查文件,并进行删除。
(这点要注意,千万不要删除了用户目录下的文件,有很多有用的)
把这个脚本 chmod +x  ,可执行属性,然后 放在 crontab 里每天夜里执行。这样,就可以
1、保证服务器的空间有效利用
2、保证在用户忘记删除自己的老邮件的情况下,空间不会超出。(大部分情况下。)
====================================================================================
#!/usr/bin/php -q
<?
$arr_dir1 = array("/","/.Draft/","/.Junk/","/.Trash/","/.Sent/");
$arr_dir2 = array("cur","new","tmp");

$t1 = time();

//删除一个月之前的邮件
$lasttime_mail = time()- (30*24*60*60);
//删除7天之前的垃圾文件
$lasttime_spam = time() - (7*24*60*60);

$totalsize = 0;
$totalnum  = 0;

$date = date("Y-m-d");
$logfile = "logs/".$date.".log";

$mysql_vpopmail = "192.168.1.xx";
$mysql_user = "root";
$mysql_password="password";
$link = mysql_connect($mysql_vpopmail, $mysql_user, $mysql_password);

$table = "mailbox";

$sql = "select username,domain,maildir from $table ";

$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
    $rows[] = $row;
}

foreach($rows as $value)
{
    $pw_dir =  $value[maildir];
    $pw_dir = "/home/vmail/".$pw_dir;

    foreach($arr_dir1 as $dir1)
    {
        foreach($arr_dir2 as $dir2)
        {
            $arr_dir[] = $pw_dir.$dir1.$dir2;
        }
    }
}

foreach($arr_dir as $dir)
{
    if(is_dir($dir))
    {
        if($dh = opendir($dir))
        {
            if( strstr($dir,"Trash") || strstr($dir,"Junk") )
                $lasttime = $lasttime_spam;
            else
                $lasttime = $lasttime_mail;
           
            while (false !== ($file = readdir($dh)))
            {
                if($file != "." || $file != "..")
                {
                    $file = $dir."/".$file;
                    if(is_file($file))
                    {
                        $filesize = filesize($file);
                        $filetime = filemtime($file);
                        $datetime = date("Y-m-d H:i:s",$filetime);
                        if($filetime < $lasttime)
                        {
                            $buffer = $file."$filesize , $datetime \r\n";
                            error_log($buffer , 3 , $logfile);
                            unlink($file);
                            $totalsize += $filesize;
                            $totalnum  += 1;
                        }
                    }
                }
            }
        }
    }
}
   
$buffer = "totalsize : $totalsize \r\n";
$buffer.= "totalnum  : $totalnum \r\n";

error_log($buffer , 3 , $logfile);

$t2 = time();

$t3 = $t2-$t1;
echo "time used: $t3\n\r";
?>
====================================================================

[ 本帖最后由 denvor 于 2009-8-14 10:06 编辑 ]