Есть Postfix + авторизация пользователей в mysql. Так вот появилась необходимость почту,
приходящую на какой-нить адрес ещё пересылать кому-угодно. Т.е. не форвардить письмо,
а именно копию отсылать на нужный адрес. Притом хочется чтобы всё было красиво и понятно.Решение:
Postfix ищет virtual_maps в базе mysql
virtual_maps=hash:/etc/postfix/virtual_maps.cfvirtual_maps.cf содержит запрос который по адресу email выдает alias.
Что-то типа такого:user = postfix
password = postfix
dbname = mail
table = alias
select_field = goto
where_field = address
hosts = 127.0.0.1На goto идет почта, которая предназначается для address. Т.е. на один физический maildir
(или другой конечный пункт) собирается почта от разных алиасов.
Проблема в том что при такой конфигурации не сделать так чтобы почта для user@domain.com
шла и на alias1@domain.com и на alias2@domain2.comПосле анализа того, как механизм Postfix читает возврат от mysql получаем:
Нужно чтобы почта для локального юзера user@domain.com приходила на user@domain.com + на mail@domain2.com
и + ещё куда нить :) При этом везде должна лежать копия.Обычно таблица alias содержит вот что:
address goto
email1 email2
email3 email2
...
email5 email_otherНадо сделать так.
address goto
email other_email1,other_email2,...Т.е. через запятую без пробелом указываем все те адреса куда надо послать копию письма.
hash:/mysql примет строку и КОРРЕКТНО подставит её куда надо, а сам Postfix нормально
всё выставит в очередь сообщений и отправит. Там же указываем адрес локальной доставки.
И всё :) Никаких скиптов, procmail и прочей бурды.Теперь представьте гибкость и легкость с такими вещами как redirect, forwarding, copy + mysql.
URL:
Обсуждается: http://www.opennet.me/tips/info/893.shtml
Вот это новость :). Еще лучше поставить себе postfixadmin...
Если не понял зачём это нужно - так не надо сразу корчить из себя гуру
гуру никто не корчит - просто ктото в очередной раз изобрел велосипед
>гуру никто не корчит - просто ктото в очередной раз изобрел велосипедЯ например тоже не думал, что в таблицах мапинга множественные записи нужно указывать через запятую, а не просто создавать разные пары записей.
Для SQL хранилища это непрозрачно, сразу не допираешь, что это полный аналог файлов.
> Я например тоже не думал, что в таблицах мапинга множественные записи нужно указывать через запятую, а не просто создавать разные пары записей.
> Для SQL хранилища это непрозрачно, сразу не допираешь, что это полный аналог файлов.А мануалы слабо почитать?
Однозначно велосипед!Кроме того, если в запросе SELECT под описание попадает несколько записей, все они вернутся postfix'у через запятую. Так что заносить в базу через запятую в одной строке вовсе не обязательно. Все адреса, куда надо скопировать, можно заносить в базу отдельными записями, но с одинаковым исходным адресом (с которого будет рассылаться копия во все остальные ящики).
>А мануалы слабо почитать?
>Однозначно велосипед!
Мануалы к чему, к postfix, MySQL, просто про синтаксис SQL запросов?
простой поиск по forward в доках идущих с postfix ничего толкового по теме не дает..
а так статья как мелкая хавтушка на тему форвардинга (для редиректа достаточно неуказывать адрес локального юзера, все уйдет по адресам указанным в поле 'goto') приходящей почты вполне нормальная.
>Кроме того, если в запросе SELECT под описание попадает несколько записей, все они вернутся >postfix'у через запятую. Так что заносить в базу через запятую в одной строке вовсе не >обязательно.
угу, возможно, только внести в базу их затруднительно
>Все адреса, куда надо скопировать, можно заносить в базу отдельными записями, >но с >одинаковым исходным адресом (с которого будет рассылаться копия во все остальные >ящики).
Интересно ты пробовал сделать это? У меня почему-то мускуль первую запись вида alias=user@domain rcpt=user1@domain1 проглатывает нормально, а уже на вторую alias=user@domain rcpt=user2@domain2 материться duplicate entry 'alias=user@domain rcpt=user1=domain1' for key.. что собственно неудивительно, когда поле алиас является первичным ключем, поле rcpt им делать неполучится.. так что решение использовать записи типа alias=user@domain rcpt=user1@domain1, user2@domain2, user3@domain3 является вполне нормальным и похоже единственно правильным..
главное что работает :)
Собственно, а почему для "зачем это нужно" не использовать sender_bcc_maps и recipient_bcc_maps?Очень как мне кажется удобно и не нужно ничего изобретать.
cat main.cf
recipient_bcc_maps = hash:/usr/local/etc/postfix/recipient_bcc_map
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc_mapcat sender_bcc_map
user@mail.com wherecopy@mail.comЕсли я правильно понял, автор просто хотел настроить механизм "архивирования" почты?
Использование данного варианта в плохих целях не гуманно и все такое прочее.
Всё через mysql и только через ОДНУ таблицу!!!
Если всё на mysql - не хочется перегружать конфигурацию hash справочниками + postmap можно забыть :)
>Всё через mysql и только через ОДНУ таблицу!!!
>Если всё на mysql - не хочется перегружать конфигурацию hash справочниками +
>postmap можно забыть :)
про приходящую почту понятно, но как быть если нужно сопировать исходящую? если использовать переменную sender_bcc_map, то эту самую мапу нужно где-то описывать.. и как-то мне в голову не приходит ничего, как совместить virtual_alias_map и sender_bcc_map в одной таблице, похоже придется заводить отдельную.. если придумаешь - напиши :-)
Как при использовании sender_bcc_maps сделать так, чтобы письма копировались не в один ящик, а в несколько?
>Как при использовании sender_bcc_maps сделать так, чтобы письма копировались не в один
>ящик, а в несколько?
согластно документации постфикс - никак, поддерживается один адрес, но ведь всегда эот понятие можно расширить :-) есть мысль отправлять на виртуальный ящик на сервере, который прописать в таблмце алиасов (собственного Maildir у него может и не быть, если в поле получателей не указывать пользователя с сервера). Т.е. в sender_bcc_maps прописать адрес bcc_user@localdomain, а в таблице алиасов alias=bcc_user@localdomain, rcpt=addr1, addr2, addr3. Впрочем если указать еще до кучи и bcc_user@localdomain - исходящая почта будет просто приходить еще и на этот адрес.
если у вас присутствует в main.cf virtual_mailbox_maps
virtual_maps
то тойже таблице alias необходимо к тем ящикам на которые копировать почту добавить самого владельца ящика иначе будет просто форвардить. Получается форвардить и самому владельцу. Зацикливания нет. Проверено
может поможет кому)