The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"mysql и почтовые алиасы"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"mysql и почтовые алиасы"  +/
Сообщение от velik on 30-Май-17, 00:19 
Здравствуйте.
В общем, наверное, глупый вопрос, но в mysql я совсем не силен и пониманию, как реализовать то, что нужно. Есть почтовый сервер. Пользователи виртуальные, таблица в mysql имеет простейший вид:

create table users (
email VARCHAR(64) NOT NULL UNIQUE PRIMARY KEY,
homedir VARCHAR(32) NOT NULL UNIQUE,
password VARCHAR(128) NOT NULL,
fullname VARCHAR(64) DEFAULT NULL
) ENGINE = InnoDB;

Нужно как-то сформировать таблицу алиасов, чтобы для одного email адреса было несколько адресатов. Другими словами, есть почтовый адрес test@example.com, для которого в реальности не должно быть почтового ящика (т.е. в таблице users такого test@example.com не должно быть), а нужно, чтобы письмо, направленное на этот адрес, уходило нескольким реальным адресатам, т.е. user1@example.com, user2@example.com, user3@example.com и т.п., которые существуют в таблице users. Хотелось бы, при этом, чтобы нельзя было создать алиас для несуществующих почтовых адресов, т.е. если, например, user5@example.com отсутствует в таблице users, то и алиас на него сделать не получится.

Пробовал создавать такую же простую таблицу, типа:

create table aliases (
alias VARCHAR(64) NOT NULL KEY,
email VARCHAR(64),
FOREIGN KEY (email) REFERENCES users(email) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

но в этом случае у меня получается добавить для одного алиаса только один реальный адресат, т.е. типа test@example.com -> user1@example.com по принципу:

insert into aliases value ( 'test@exmaple.com', 'user1@exmaple.com' );

и для одного адресата оно работает и в принципе почта бегает, а как сделать так, чтобы письмо уходило на несколько разных адресов то? Т.е. чтобы в колонке email таблицы aliases был не один адрес, а несколько?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "mysql и почтовые алиасы"  +/
Сообщение от Аноним (??) on 30-Май-17, 02:45 
если по простому:
email в таблице алиасов делаешь TEXT без привязки к внешнему ключу.
и _внезапно_ в это поле можно вбить список реальных мыл через запятую, постфикс хавает,
но так как ты не указываешь ни какой MTA у тебя стоит ни какие запросы используешь, ни как оные запросы привязаны к конфигу оного MTA остаётся только послать учиться задавать вопросы...


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "mysql и почтовые алиасы"  +/
Сообщение от velik on 30-Май-17, 09:23 
> если по простому:
> email в таблице алиасов делаешь TEXT без привязки к внешнему ключу.
> и _внезапно_ в это поле можно вбить список реальных мыл через запятую,
> постфикс хавает

Без привязки к внешнему ключу имеется ввиду без строчки FOREIGN KEY (email) REFERENCES users(email) ON DELETE CASCADE ON UPDATE CASCADE правильно я понимаю?
т.е. по типу:
create table aliases (
alias VARCHAR(32) NOT NULL KEY,
email TEXT
) ENGINE = InnoDB;
insert into aliases value ( 'test@example.com', 'user1@example.com,user2@example.com' );
в принципе, именно такие команды сам mysql съедает без ошибок (проверить как в таком случае бегает почта позже только смогу), с командой foreign key... вылезает ошибка:  BLOB/TEXT column 'email' used in key specification without a key length
Другими словами, получается, что в таком формате нет возможности реализовать функционал, при котором запрещена возможность создать алиас при несуществующем реальном ящике в таблице users и нужно очень внимательно самому за эти следить?

> но так как ты не указываешь ни какой MTA у тебя стоит
> ни какие запросы используешь, ни как оные запросы привязаны к конфигу
> оного MTA остаётся только послать учиться задавать вопросы...

MTA - Действительно postfix, а запрос через virtual_alias_maps = mysql:...файлалиасов.sql планируется, ну и сам файлалиасов что-то в стиле:
unix:file=/tmp/mysql.sock
user = sqlviewer
password = <password>
dbname = maildb
table = aliases
select_field = email
where_field = alias

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру