Hallo,
da ich einfache MySQL Syntax eher nur lesen kann, wende ich mich an Euch eine Abfrage für eine postfix Filtertabelle zu formulieren. Postfix kennt eine Mailadresse und übergibt sie als "%s", das Ergebnis der Abfrage wird 'greylist' oder '' lauten. Für die Übergabe habe ich offensichtlich nur die Variable query, die ich mit normaler MySQL-Syntax füllen kann. Nun zur Komplexität der Fragestellung:
Es gibt die Tabelle 'mail_users', diese enthält u.a. 'id', 'email' und 'policy'. - 'id' - int(11) - AUTO_INCREMENT - 'email' - varchar(255) = vollständige Emailadresse eines lokalen Kontos - 'policy' - enum('greylist,'') = postfix erwartet von der Abfrage eintweder nix oder den Namen einer vorher konfigurierten polica, hier 'greylist'
Soweit, so einfach: "SELECT policy FROM mail_users WHERE email='%s' AND policy='greylist' LIMIT 1" liefert mit 'greylist' oder nichts, so wie ich es will.
Nun können aber auch Adressen in der DB sein, die einer Weiterleitung dienen oder Alias auf ein Konto sind, das steht in der Tabelle 'mail_virtual'. - 'id' - int(11) - AUTO_INCREMENT - 'email' - varchar(255) = vollständige Emailadresse - 'popaccount' - int(11) - referenzier damit auf die 'id' in 'mail_users' oder ist schlicht '0', wenn es kein lokales Konto gibt - 'destination' - text - eine Zieladresse - 'iscachtall' - tinyint(1) - '0' oder '1' für das selbsterklärende Nein oder Ja
Nehmen wir an, ich habe das Konto ronny@seffner.de, die aliase info@seffner.de, forward@seffner.de dazu und das catchall-Konto bernd@seffner.de, sähen die Tabellen wohl wie folgt aus:
mail_users 11, ronny@seffner.de, greylist 84, bernd@seffner.de, greylist
mail_virtual 41, ronny@seffner.de, 11, ronny@seffner.de, 0 57, info@seffner.de, 11, ronny@seffner.dem, 0 133, bernd@seffner.de, 84, bernd@seffner.de, 1 287, forward@seffner.de, 0, klaus@gmail.com, 0
Da ich meine Policies nur für lokale Konten durchsetzen will, hat sich der Entwickler hinter dem Adminpanel wohl gedacht, gehört die Policy ans Konto und nicht die Mailadresse. Aus Sicht des Webfrontends wird 'greylist' nur für ronny@seffner.de und bernd@seffner.de gesetzt soll aj aber für alle zugehörigen Aliase und ggf. auch für catchall gelten.
Wie muss nun die Abfrage für meine o.g. 'query' Variable lauten wenn die Übergaben von %s als: ronny@seffner.de dann 'greylist', info@seffner.de dann 'greylist', bernd@seffner.de dann 'greylist', irgendwas@seffner.de dann 'greylist', forward@seffner.de dann '' liefern soll?
Sicherlich wäre es für diese Aufgabenstellung einfacher, wenn die 'policy' an der Adresse in 'mail_virtual' stehen würde, aber das bedeutet ein aufwändiges Ändern des Webfrontends und löst das catchall-Problem noch nicht.
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen
www.seffner.de | ronny@seffner.de | +49 35245 72950