postgres/postgres.forwarders_out.sql
2017-02-21 02:33:47 +01:00

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',',');