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

Источник : eddnet.org/?p=588

Запись опубликована в рубрике Postfix. Добавьте в закладки постоянную ссылку.

Добавить комментарий

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

Я не спамер This plugin created by Alexei91