Ta bort sökvägen till mejlen i hMailserver
Uppdaterad
Ett PHP skript som tar bort sökvägen till mejlen i mySQL databasen för hMailserver.
Äldre versioner av hMailserver sparade hela sökvägen till mejlen i databasen, medan version 5.4 eller nyare endast sparar filnamnet. Detta kan då krångla till det om man byter server och inte installerar i samma katalog. T.ex om man går från 32 till 64 bitar Windows. Då blir katalogerna "program files" på 32 och "program files(x86)" på 64 bitars system.Tittar man i tabellen "hm_messages" kan man där se att äldre mejl har hela sökvägen sparad medan nya har endast filnamnet sparat.
Skript
Med detta skript uppdateras alla mejl till bara filnamnet.OBS Beroende på serverns hastighet kan du behöva begränsa antal mejl för att förhindra timeout.
- Kod: Markera allt
<?php # E-mail per run $pagesize=500; # Databas config $db_config=array(); $db_config['host'] = 'localhost'; $db_config['databas'] = 'hmailserver'; $db_config['password'] = 'password'; $db_config['user'] = 'user'; $db_config['port'] = 3306; $page=(empty($_GET['page'])?0:(int)$_GET['page']); ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>hMailServer e-mail path eliminator</title> </head> <body> <form action="" method="get"> Page: <input name="page" type="text" value="<?php echo $page+1 ?>"> <input name="submit" type="submit" value="Run"> </form> <?php if($page){ $sql = new mysqli($db_config['host'],$db_config['user'],$db_config['password'],$db_config['databas'],$db_config['port']); if($sql->connect_error)exit('Connect Error (' . $sql->connect_errno . ') '. $sql->connect_error); $sql->clientflags = MYSQL_CLIENT_COMPRESS; $sql->set_charset('utf8'); $start=($page-1)*$pagesize+1; echo "Process e-mail $start to ".($start-1+$pagesize)."<br>"; $query="SELECT `messageid`,`messagefilename` FROM `hm_messages` ORDER BY `messageid` ASC LIMIT $start,$pagesize"; $rs=$sql->query($query) or exit('SQL Error (' . $sql->errno . ') ' . $sql->error); while($row_rs = $rs->fetch_row()){ update($row_rs[0],$row_rs[1]); } $rs->close(); } function update($id,$mess){ global $sql; $new=preg_replace ('/.*?{(.*?)}.eml/','{$1}.eml',$mess); echo "$id : $new < $mess"; if($mess==$new)echo ' NO<br>'; else{ $query="UPDATE `hm_messages` SET `messagefilename`='$new' WHERE `messageid`=$id"; $sql->query($query) or exit('SQL Error (' . $sql->errno . ') ' . $sql->error); echo ' YES<br>'; } } ?> </body> </html>