[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