主题: 分享一个删除过期邮件的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 编辑 ]