Catch-All mit Courier und virtuellen Usern in MySQL

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
zhenech
Posts: 8
Joined: 2004-10-22 16:38
Location: Düsseldorf

Catch-All mit Courier und virtuellen Usern in MySQL

Post by zhenech » 2006-03-03 13:17

Moin Jungs und Mädels,

ich hab hier einen Server mit courier (sowohl -mta als auch -imap und -pop). Funktioniert soweit auch sehr gut. Mails kommen bei den richtigen Usern an.
Jetzt würd ich aber gerne pro Domain eine Catch-All Adresse einrichten, sprich Mails die einen Unbekannten Empfänger haben, werden nicht verworfen, sondern an einen best. User zugestellt.
Im Netz findet man dazu irgendwie nicht all zu viele Informationen. An einer Stelle hab ich gelesen, man soll als E-Mail-Adresse in der mySQL einfach '@domain.de' eintragen - klappt nicht. Wo anders sollte man 'alias@domain.de' nehmen - klappt genausowenig.

Ich befürchte es liegt an meiner MySQL-Abfrage:
MYSQL_SELECT_CLAUSE SELECT username, password_enc, password, uid, gid, CONCAT(homedir,maildir), '', '2147483647S', mail_users.email FROM mail_users LEFT JOIN mail_virtual ON mail_virtual.destination=mail_users.email WHERE mail_virtual.email='$(local_part)@$(domain)'

Theoretisch müsst ich ja jetzt den WHERE-Teil abändern, a la 'email=email@domain OR (email LIKE *@domain AND iscatchall=1) oder?
das iscatchall ist ein Feld in der MySQL, das auf 1 steht, wenn es eine Catch-All adresse sein soll.
Würde aber mangels guter MySQL Kenntnisse lieber zuerst jemanden Fragen, der sich auskennt, oder vielleicht eine schönere Lösung hat.

TIA
Zhenech

zhenech
Posts: 8
Joined: 2004-10-22 16:38
Location: Düsseldorf

Re: Catch-All mit Courier und virtuellen Usern in MySQL

Post by zhenech » 2006-03-03 14:12

Hab grad ein Wenig rumgetestet mit den SELECTs und denke das hier sollte helfen:

SELECT username, password_enc, password, uid, gid, CONCAT(homedir,maildir), '', '2147483647S', mail_users.email FROM mail_users LEFT JOIN mail_virtual ON mail_virtual.destination=mail_users.email WHERE mail_virtual.email='$(local_part)@$(domain)' OR (mail_virtual.email='@$(domain)' AND iscatchall=1) LIMIT 1

Das LIMIT 1 muss sein, weil ich sonst bei existierenden Mailadressen die Catch-All auch bekomme, und somit 2 Zeilen Antwort habe.