Web интерфейс для транспорта Postfix

В общем, надоело мне добавлять в транспорт пользователей руками, а лень, как известно это двигатель прогресса, поэтому, я решил написать небольшой Web UI. Выглядит он очень простенько, позволяет добавлять или удалять записи и выводит те, который уже есть в базе. Естественно, таблица транспорта должна быть в MySQL.

Если вам нужен интерфейс для управления Postfix-ом, обратите свое внимание на PostfixAdmin

И так, создаем базу  в mysql с именем postfix и таблицу transport, для этого зайдя в консоль mysql:

CREATE DATABASE postfix;
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:

cat << END >> /etc/postfix/mysql-virtual_transports.cf1
user = user
password = password
hosts = localhost
dbname = postfix
query = SELECT transport FROM transport WHERE domain=’%s’
END

Где user — пользователь базы, password — пароль этого пользователя, hosts — имя или IP адрес где находиться база, dbname — имя базы.
В файле main.cf добавляем:

transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf

Если вы хотите использовать совместно Mysql базу и хешированый фаил, то запись будет такая:

transport_maps = hash:/etc/postfix/transport,
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

!/bin/bash
#
#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 :

<?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].»\»уже в базе»;
}
?>

Запускается, это все очень просто,

./clean.sh /path/to/transport

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>