60 lines
1.8 KiB
PL/PgSQL
60 lines
1.8 KiB
PL/PgSQL
|
|
CREATE LANGUAGE plpgsql;
|
|
|
|
DROP FUNCTION IF EXISTS udf_forwarders_out(TEXT,TEXT,CHAR);
|
|
|
|
CREATE FUNCTION udf_forwarders_out( email_str TEXT,
|
|
vacation_domain TEXT ,
|
|
list_seperator CHAR
|
|
)
|
|
RETURNS TEXT AS $$
|
|
DECLARE
|
|
forward_str text;
|
|
local_email_part TEXT;
|
|
domain_email_part TEXT;
|
|
BEGIN
|
|
|
|
-- get list of forwarders
|
|
--
|
|
SELECT goto INTO forward_str FROM alias WHERE address=email_str;
|
|
|
|
-- entferne mailbox emailadresse
|
|
--
|
|
forward_str = replace(forward_str, email_str, '' );
|
|
|
|
-- entferne vacation adresse
|
|
--
|
|
local_email_part = substring(email_str, 1, position('@' in email_str) - 1);
|
|
domain_email_part = substring(email_str, position('@' in email_str) + 1 );
|
|
forward_str = replace(forward_str, local_email_part || '#' || domain_email_part || '@' || vacation_domain, '');
|
|
|
|
-- enferne doppelte seperatorzeichen
|
|
--
|
|
WHILE position( list_seperator || list_seperator in forward_str ) > 0 LOOP
|
|
forward_str = replace(forward_str, list_seperator || list_seperator , '');
|
|
END LOOP;
|
|
|
|
-- entferne erstes zeichen wenn es das seperatorzeichen ist
|
|
--
|
|
IF substring(forward_str,1,1) = list_seperator THEN
|
|
forward_str = substring(forward_str from 2);
|
|
END IF;
|
|
|
|
|
|
-- entferne letztes zeichen wenn es das seperatorzeichen ist
|
|
--
|
|
IF substring(forward_str from char_length(forward_str)) = list_seperator THEN
|
|
forward_str = substring(forward_str, 1, char_length(forward_str) - 1);
|
|
END IF;
|
|
|
|
|
|
-- forward_str = substring(forward_str from char_length(forward_str));
|
|
|
|
RETURN forward_str;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
SELECT udf_forwarders_out('ckubu@oopen.de','autoreply.oopen.de',',');
|
|
|