[Postfixbuch-users] Domain Alias
Jonas Genannt
jonasge at gmx.net
Sa Nov 17 02:00:20 CET 2007
Hallo,
>Wenn die Schmerzgrenze überschritten wird, erstellt man eine stored
>function [1], die die Ersetzung direkt in der Datenbank macht.
an sowas habe ich vor einiger Zeit fuer mein CpVES gebastelt, jedoch
nicht weiter verfolgt.
Hier mein Ergbnis bisher:
TabellenInfos:
Tabelle: domains
+----+-----------------+
| id | dnsname |
+----+-----------------+
| 1 | foo.com |
| 2 | test_de.name.de |
+----+-----------------+
Tabelle: users
+----+------------------------------+
| id | email |
+----+------------------------------+
| 3 | bar at foo.com |
+----+------------------------------+
Tabelle: test (fuer das mapping domain -> domain)
+----+-------+-----+
| id | fromd | tod |
+----+-------+-----+
| 5 | 2 | 1 |
+----+-------+-----+
Erklaerung: Die fromd ID ist die Domain A, die auf tod ID Domain B
weitergeleitet wird.
Also wird hier in dem Beispiel @test_de.name.de -> @foo.com gemappt.
Ich habe nun eine Procedure erzeugt, der man die E-Mailadresse
uebergibt:
call test_1("bar at test_de.name.de", @z, at e, @r);
select @z, at e, at r;
+-----------------+---------+-------------+
| @z | @e | @r |
+-----------------+---------+-------------+
| test_de.name.de | foo.com | bar at foo.com |
+-----------------+---------+-------------+
Somit mappt meine Procedure den User bar at test_de.name.de auf
bar at foo.com ueber die Tabelle test.
Meine Procedure sieht so aus:
create procedure test_1
( IN addresse VARCHAR(255),
OUT fromd1 VARCHAR(255),
OUT fromd2 VARCHAR(255),
OUT emailout VARCHAR(255) )
BEGIN DECLARE pos_id INT DEFAULT 0;
select b.id,a.dnsname INTO pos_id,fromd1 from domains AS a
LEFT JOIN test AS b ON b.fromd=a.id WHERE a.dnsname =
SUBSTRING(addresse,INSTR(addresse,"@")+1,LENGTH(addresse));
IF pos_id != '0' THEN
SELECT b.dnsname INTO fromd2 FROM test AS a LEFT JOIN
domains AS b ON b.id=a.tod WHERE a.id=pos_id;
SELECT a.email INTO emailout FROM users AS a
WHERE a.email=replace(addresse,
fromd1,fromd2);
END IF;
END;
//
Das ganze ist nicht wirklich perfekt, aber vielleich ein Loesungsansatz
den man Verbessern und hier Posten kann :)
Gruss,
Jonas
Mehr Informationen über die Mailingliste Postfixbuch-users