[Postfixbuch-users] virtual_alias und catch-all

Uwe Driessen driessen at fblan.de
Fr Mai 21 01:24:14 CEST 2010



On Behalf Of Christian Boltz
> Die SQL-Abfrage ist über zwei maps verteilt - die erste für "einzelne"
> Empfänger, die zweite für Catchalls.
> Beides in einer Map würde AFAIK relativ schwierig, weil die Catchall-
> Query auch für existierende Mailboxen anspringen würde und dann alles
> zusätzlich beim Catchall ankäme. Durch die Trennung der Queries greift
> die Postfix-Abfragereihenfolge (erst komplette Adresse, wenn nichts
> gefunden wird Suche nach einem Catchall) und alles funktioniert wie es
> soll ;-)

Wie wäre es mit SELECT IF like that

SELECT IF((
    SELECT alias.address FROM alias,alias_domain
     WHERE alias_domain.alias_domain = '%d'
        and alias.address = CONCAT('%u', '@', alias_domain.target_domain)
        AND alias.active = 1
        AND alias_domain.active='1' LIMIT 1)>0,
     (SELECT goto FROM alias,alias_domain
        WHERE alias_domain.alias_domain = '%d'
        and alias.address = CONCAT('%u', '@', alias_domain.target_domain)
        AND alias.active = 1
        AND alias_domain.active='1' ),
     (SELECT goto FROM alias,alias_domain
        WHERE   alias_domain.alias_domain = '%d'
        and alias.address = CONCAT('@', alias_domain.target_domain)
        AND alias.active = 1
        AND alias_domain.active='1'));


Ich habs nicht probiert da ich das über statische Hashfiles erledige und auch die
databases nicht kenne.

Grob gesagt schaut das Select if ob es ein Ergebnis für das erste select gibt dann holt er
das Ergebnis mit dem 2. Select gibt es kein Ergebnis wird das Alternative Select
ausgeführt. 

Also gibt es eine vollständige Mailadresse dann holt er die gibt e die nicht und es gibt
ein catchall dann wird die aus der Datenbank gelesen.

Musst evtl. noch ein wenig feintuning am statement machen aber dann kann das über einen
zugriff auf die Database erledigt werden.

> 
> Und die Queries sind...
> 
> virtual_mailbox_domains =
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
> virtual_alias_maps =
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
> virtual_mailbox_maps =
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
>    proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
> 
> mysql_virtual_alias_domain_maps.cf:
> query = SELECT goto FROM alias,alias_domain WHERE
> alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@',
> alias_domain.target_domain) AND alias.active = 1 AND
> alias_domain.active='1'
> 
> mysql_virtual_alias_domain_catchall_maps.cf:
> query  = SELECT goto FROM alias,alias_domain WHERE
> alias_domain.alias_domain = '%d' and alias.address = CONCAT('@',
> alias_domain.target_domain) AND alias.active = 1 AND
> alias_domain.active='1'
> 
> mysql_virtual_alias_domain_mailbox_maps.cf:
> query = SELECT maildir FROM mailbox,alias_domain WHERE
> alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u',
> '@', alias_domain.target_domain) AND mailbox.active = 1 AND
> alias_domain.active='1'
> 
> Die Queries für "normale" Aliase spare ich mir an dieser Stelle. Bei
> Bedarf empfehle ich einen Blick in POSTFIX_CONF.txt aus der
> Postfixadmin-Doku - von dort stammen auch die Queries oben.
> 
> 
> Übrigens: ich bastle gerade an Postfixadmin 2.3.1. Das ist im
> Wesentlichen ein Bugfix-Release für 2.3. Einzige optische Änderung wird
> das Anzeigen der Alias-Ziele bei den Mailboxen (das wurde gefühlte
> tausend Mal gewünscht ;-)
> 
> Falls jemand vorab testen will: svn co
> https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/branches/postfixadmin-2.3
> und sich über eine ganze Ladung Bugfixes freuen ;-)
> 
> 


Mit freundlichen Grüßen

Drießen

-- 
Software & Computer
Uwe Drießen
Lembergstraße 33
67824 Feilbingert
Tel.: +49 06708 / 660045   Fax: +49 06708 / 661397






Mehr Informationen über die Mailingliste Postfixbuch-users