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>

Publiserad
Uppdaterad


Inga kommentarer

Skriv en kommentar

Återstående antal tecken: 768

Uppdaterad: 2017-08-10 11:53
Copyright © 2009-2024 - tunisempire.com - All Rights Reserved RSS Feed Sitemap