Hallo Rene, Hallo morphium
um nicht falsch verstanden zu werden. Ich bin Dir und 'morphium' für die selbstlose Hilfe dankbar.
Was klappt mit meiner Lösung nicht? Die ist getestet mit Deinen Angaben. Sollten Eure Tabellen doch anders aussehen, bitte exakt posten.
Zu aller Erst muss ich eingestehen, ich habe Eure Lösungen verwechselt ;-(
morphium : subselect : geht für Konten und Aliase, nicht für Catch All morphium : join : geht für Konten und Aliase, nicht für Catch All
Zumindest das 'LIMIT 1' hatte ich zur Sicherheit eingesetzt, weil Postfix hier kein Array sondern nur einen Wert erwartet und ich nicht weiß, wie er sonst reagiert.
Rene : gesuchten anzeigen : geht nur für das Konto, nicht für ein Alias und auch nicht für Catch All
Einige meiner Angaben hier waren vereinfacht oder schlicht falsch abgetippt, das habe ich aber bei der Übertragung Eurer Lösungen wieder korrigiert. Zur Sicherheit der Strukturexport meiner beiden Tabellen:
CREATE TABLE IF NOT EXISTS `mail_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL DEFAULT '', `password` varchar(128) NOT NULL DEFAULT '', `password_enc` varchar(128) NOT NULL DEFAULT '', `uid` int(11) NOT NULL DEFAULT '0', `gid` int(11) NOT NULL DEFAULT '0', `homedir` varchar(255) NOT NULL DEFAULT '', `maildir` varchar(255) NOT NULL DEFAULT '', `postfix` enum('Y','N') NOT NULL DEFAULT 'Y', `domainid` int(11) NOT NULL DEFAULT '0', `customerid` int(11) NOT NULL DEFAULT '0', `quota` bigint(13) NOT NULL DEFAULT '0', `pop3` tinyint(1) NOT NULL DEFAULT '1', `imap` tinyint(1) NOT NULL DEFAULT '1', `username` varchar(255) NOT NULL DEFAULT '', `policy_greylist` enum('policy_greylist','') NOT NULL DEFAULT '', `bypass_virus_checks` char(1) NOT NULL DEFAULT 'N', `bypass_spam_checks` char(1) NOT NULL DEFAULT 'N', `spam_tag2_level` float(4,1) NOT NULL DEFAULT '5.0', `spam_kill_level` float(4,1) NOT NULL DEFAULT '20.0', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=642 ;
CREATE TABLE IF NOT EXISTS `mail_virtual` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL DEFAULT '', `email_full` varchar(255) NOT NULL DEFAULT '', `destination` text NOT NULL, `domainid` int(11) NOT NULL DEFAULT '0', `customerid` int(11) NOT NULL DEFAULT '0', `popaccountid` int(11) NOT NULL DEFAULT '0', `iscatchall` tinyint(1) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `email` (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1017 ;
Allen Lösungsansätzen fehlt noch das Thema 'iscatchall'. Mir ist klar, dass hier mit Stringoperationen und Bedingungen gearbeitet werden muss denn: Wenn eine Mailadresse in mail_virtual.email nicht existiert, so ist doch zu prüfen ob die Domain der angefragten Emailadresse (%s) in einer (oder mehreren) mail_virtual.email auch Verwendung findet und ob diese(r) Eintr[a|ä]g(e) dann noch iscatchall=1 haben. In diesem Fall ist der betreffener mail_virtual Eintrag wieder in Richtung mail_users zu prüfen ob dort policy_greylist gesetzt ist.
Das fällt mir ja schon in normalen Worten schwer.
Nö - kannst Du die Datensätzte für "das Konto ist ein catch_all" bitte posten?
INSERT INTO `mail_virtual` (`id`, `email`, `email_full`, `destination`, `domainid`, `customerid`, `popaccountid`, `iscatchall`) VALUES (2, 'ronny@i-t-sys.de', 'ronny@i-t-sys.de', 'ronny@i-t-sys.de', 1, 3, 548, 1), (901, 'info@i-t-sys.de', 'info@i-t-sys.de', 'ronny@i-t-sys.de', 1, 3, 0, 0);
INSERT INTO `mail_users` (`id`, `email`, `password`, `password_enc`, `uid`, `gid`, `homedir`, `maildir`, `postfix`, `domainid`, `customerid`, `quota`, `pop3`, `imap`, `username`, `policy_greylist`, `bypass_virus_checks`, `bypass_spam_checks`, `spam_tag2_level`, `spam_kill_level`) VALUES (548, 'ronny@i-t-sys.de', '', '*****', 2000, 2000, '/var/kunden/mail/', 'its/ronny@i-t-sys.de/', 'Y', 1, 3, 0, 1, 1, 'ronny@i-t-sys.de', 'policy_greylist', 'N', 'N', 5.0, 20.0);
Mit freundlichen Grüßen / Kind regards Ronny Seffner -- Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen
www.seffner.de | ronny@seffner.de | +49 35245 72950