В этой статье хочу рассказать, о том, с чем можете столкнуться при использовании postfixadmin’a, в качестве управления почтой юзеров и как это можно решить.
1)PostfixAdmin не создаёт домен.
Данная проблема очень распространена. Причём самое интересное, что у одних работает нормально, у других проблема. Сам сталкивался с ней. Нашёл вот такое решение
functions.inc.php
в get_magic_quotes_gpc () == 0 меняем 0 на 1 и все работает
function escape_string ($string)
{
global $CONF;
if (get_magic_quotes_gpc () == 0) <- ВОТ ЗДЕСЬ
{
if ($CONF[‘database_type’] == “mysql”) $escaped_string = mysql_real_escape_string ($string);
if ($CONF[‘database_type’] == “mysqli”) $escaped_string = mysqli_real_escape_string ($string);
if ($CONF[‘database_type’] == “pgsql”) $escaped_string = pg_escape_string ($string);
}
else
{
$escaped_string = $string;
}
return $escaped_string;
}
Возможно портребуется ещё изменить внести такое изменение в php.ini
magic_quotes_gpc = On
2)Нельзя посмотреть пароль уже созданного юзера.
Дело в том, что я часто имею дела с юзерами, которые по тем или иным причинам теряют\забывают свои пароли. И хотелось бы иметь возможность в любое время их посмотреть. Хотя в postfixadmin’e и есть опция показывать пароли, на самом деле она показывает пароль только при создании ящика. Сначало добавим столбец для хранения чистого пароля в таблице mailbox:
#mysql postfixadmin -upostfixadmin -ppostfixadmin
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 284
Server version: 5.0.81 FreeBSD port: mysql-server-5.0.81
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>ALTER TABLE mailbox AD pw_clear TEXT;
mysql>QUIT;
Добавили поле pw_clear. Теперь подредактируем php-скрипты. Будем редактировать такие файлы: create-mailbox.php, edit-mailbox.php,templates/edit-mailbox.php. Имена файлов относительно корня postfixadmin’a. Редактируем:
create-mailbox.php
Ищем и комментируем блок (это делается )
#$result = db_query (“INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES (‘$fUsername’,’$fUsername’,’$fDomain’,NOW(),NOW(),
# if ($result[‘rows’] != 1)
# {
# $tDomain = $fDomain;
# $tMessage = $PALANG[‘pAlias_result_error’] . “($fUsername -> $fUsername)”;
# }
Ищем строку
$result = db_query (“INSERT INTO $table_mailbox (username,password,
и вставляем нужные поля (выделены жирным):
$result = db_query (“INSERT INTO $table_mailbox (username,password,pw_clear,name,maildir,local_part,quota,domain,created,modified,active) VALUES (‘$fUsername’,’$password’,‘$fPassword’,’$fName’,’$maildir’,’$local_part’,’$quota’,’$fDomain’,NOW(),NOW(),’$sqlActive’)”);
edit-mailbox.php
Ищем строку:
$formvars[‘password’] = pacrypt($fPassword);
и вставляем после неё строку
$formvars[‘pw_clear’] = $fPassword;
template\edit-mailbox.php
В самом начале файла есть код, заключенный в :
if( !defined(‘POSTFIXADMIN’) ) die( “This file cannot be used standalone.” ); ?>
Так вот, переделываем его в такой:
if( !defined(‘POSTFIXADMIN’) ) die( “This file cannot be used standalone.” );
$con = mysql_connect(“localhost”, “postfixadmin”, “postfixadmin”) or die(mysql_error());
mysql_select_db(“postfixadmin”, $con) or die(mysql_error());
$result = mysql_query(“SELECT pw_clear FROM mailbox where username=’$fUsername'”) or die(mysql_error());
while($row = mysql_fetch_row( $result ))
{
$pass=$row[‘0’];
}
?>
Так же после блока
<tr>
<td><?php print $PALANG[‘pEdit_mailbox_username’]; ?></td>
<td><?php print $fUsername; ?></td>
<td><?php print $pEdit_mailbox_username_text; ?></td>
</tr>
Вставляем такой
<tr>
<td><?php print “current password”; ?></td>
<td><?php print $pass; ?></td>
</tr>
Всё! Готово. Теперь при заходе по ссылке изменить пароль, в поле current password будет отображаться текущий пароль!
3) Удаление пользователей, при удалении алиасов
Есть ещё одна неприятность: при создании ящика, автоматом создаётся и алиас с его самого на его самого. Причём, при попытке создать алиас с этого ящика на другой – вызывает ошибку: “Такой алиас уже есть”. Для того, что бы не создавался атоматом алиас открываем файл create-mailbox.php, ищем и комментируем блок
# $result = db_query (“INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES (‘$fUsername’,’$fUsername’,’$fDomain’,NOW(),NOW(),
# if ($result[‘rows’] != 1)
# {
# $tDomain = $fDomain;
# $tMessage = $PALANG[‘pAlias_result_error’] . ”
($fUsername -> $fUsername)
“;
# }