Покликали меня юзеры. Попросили у меня создать почтовый ящик, но только так, что бы вся почта, которая на домен приходит – должна в этот ящик попадать. И что бы все имена считались валидными. А дело происходило на доставшемся мне в наследство сервере под Debian, на котором установлен Exim4 в связке с MySQL. В детстве там работал Virtual Exim, но сразу после принятия мною этого сервера Virtual Exim сломался (делаю честные глаза, как будто я тут не при чём). Так что всё началось с заведения аккаунта на сервере. Задачка, надо сказать, не самая тривиальная
Небольшое изучение таблиц в базе vexim дало вот такой скрипт:
# cat /home/ххх/addmail#!/bin/bashecho «Создание почтового адреса $1@$2 на хостинге хххх.by»if [ $# -ne "3" ]thenecho «Порядок использования: `basename $0` имя домен пароль»exit 1fiif [ $(id -u) -ne 0 ]; thenecho «Only root may add a user to the system»exit 2ficd /home/хххecho select domain_id from domains where domain=\’$2\’\; | mysql -u root -p`</root/mysql.pass` vexim | tail -n 1 > dom_iddom_id=`cat dom_id`rm dom_idif [ "$dom_id" == "" ]; thenecho «Домен $2 не найден»exit 2fiecho select username from users where username=\’$1@$2\’\; | mysql -u root -p`</root/mysql.pass` vexim | tail -n 1 > dom2dom2=`cat dom2`rm dom2if [ "$dom2" != "" ]; thenecho «Адрес $1@$2 уже существует в базе.»exit 2ficrypt_pass=`php -r «print crypt(‘$3′);»`sqlline=`echo INSERT INTO users SET domain_id=$dom_id, localpart=\’$1\’, username=\’$1@$2\’, clear=\’$3\’, crypt=\’$crypt_pass\’, uid=90, gid=90, smtp=\’/usr/local/mail/$2/$1/Maildir\’, pop=\’/usr/local/mail/$2/$1\’, type=\’local\’,admin=0\;`echo $sqlline | mysql -u root -p`</root/mysql.pass` vexim
Но на этом дело не остановилось. Мне надо было ещё разобраться как сделать так, что бы система согласилась принимать почту для всех адресов нужного мне домена. Ну и складывало в этот самый созданный скриптом почтовый ящик. Изучение конфигов и документаций (русской и не русской) на exim повергло меня в уныние. Хитрый язык оказывался несколько непонятным для реализации на нём какой-то логики. Плюс к этому, ещё совсем не ясно кто, как и когда обращается в MySQL с запросами. Я спросил у ясеня, но ясень забросал меня осеннею листвой. А вот когда я спросил у правильных админов, то мне ответили.
Это всё ещё в работе, потому как оказалось, что rewrite не годится – надо что бы письма лежали в конкретном почтовом ящике, но адреса получателей сохранялись такими, какими их изначально отправили.
(c)