В общем, надоело мне добавлять в транспорт пользователей руками, а лень, как известно это двигатель прогресса, поэтому, я решил написать небольшой Web UI. Выглядит он очень простенько, позволяет добавлять или удалять записи и выводит те, который уже есть в базе. Естественно, таблица транспорта должна быть в MySQL.
Если вам нужен интерфейс для управления Postfix-ом, обратите свое внимание на PostfixAdmin
И так, создаем базу в mysql с именем postfix и таблицу transport, для этого зайдя в консоль mysql:
USE postfix;
CREATE TABLE transport ( domain varchar(128) NOT NULL default », transport varchar(128) NOT NULL default », UNIQUE KEY domain (domain) ) TYPE=MyISAM;
Теперь у нас есть база и таблица транспорта, необходимо об этом сообщить постфиксу, для этого создадим файл в /etc/postfix/ с именем mysql-virtual_transports.cf:
user = user
password = password
hosts = localhost
dbname = postfix
query = SELECT transport FROM transport WHERE domain=’%s’
END
Где user — пользователь базы, password — пароль этого пользователя, hosts — имя или IP адрес где находиться база, dbname — имя базы.
В файле main.cf добавляем:
Если вы хотите использовать совместно Mysql базу и хешированый фаил, то запись будет такая:
proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
Далее, качаем Postfix Transport UI
Все что необходимо сделать, это скачать, разархивировать и сделать эти три php скрипт доступными через web. Ничего сложного там нет, поэтому я не буду вдаваться в подробности. Настройки для MySQL находятся в файле config.php.
Вполне возможно, что у вас уже существует достаточно большой файл transport и вы хотели бы перенести его содержимое в mysql таблицу. Можно воспользоваться двумя моими скриптами. Первый clean.sh очищает файл transport от мусора и разбивает каждую строку на две составляющие, после чего передает эти данные php скрипту add.php и тот в свою очередь вносит эти данные в MySQl базу.
Clean.sh
#
#Parsing and clinsing file. Cleansing fron comments «#», parsing for «@»
#Then spliting for email and transport way.
TMP=»tmp»
do
echo $LINE | grep «#»
if [ $? -ne 0 ]
then
echo $LINE | grep «@»
if [ $? -eq 0 ]
then
echo $LINE > $TMP
mail=`awk ‘split($0,a,» «){print a[1]}’ $TMP`
transport=`awk ‘split($0,a,» «){print a[2]}’ $TMP`
php add.php $mail $transport
echo $LINE >> full_list.txt
fi
fi
done < $1
rm -f $TMP
И add.php :
// hostname or ip of server
$servername=’localhost’;
// username and password to log onto db server
$dbusername=’user’;
$dbpassword=’password’;
// name of database
$dbname=’postfix’;
////////////// Do not edit below/////////
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function connecttodb($servername,$dbname,$dbuser,$dbpassword)
{
global $link;
$link=mysql_connect («$servername»,»$dbuser»,»$dbpassword»);
if(!$link){die(«Could not connect to MySQL»);}
mysql_select_db(«$dbname»,$link) or die («could not open db».mysql_error());
}
$select = «SELECT domain FROM transport WHERE domain = ‘{$argv[1]}'»;
$mail = mysql_query($select) or die («Error updating: «.mysql_error());
if (mysql_num_rows($mail) == 0)
{
$query_domain = «INSERT INTO transport (domain,transport) VALUES (‘».$argv[1].»‘,'».$argv[2].»‘)»;
mysql_query($query_domain) or die (‘Error updating’);
}
else
{
echo «Простите, но адрес \»».$argv[1].»\»уже в базе»;
}
?>
Запускается, это все очень просто,