CREATE OR REPLACE FUNCTION f_doc2txt(text) RETURNS TEXT AS' use strict; my $str="begin-base64 600 zzz\n".$_[0]."===="; $str= `echo "$str"|uudecode -o /dev/stdout|antiword - -i0`; return $str; ' LANGUAGE plperlu; -- ======================================================================= CREATE OR REPLACE FUNCTION f_get_document(text,text) RETURNS TEXT AS' DECLARE mail_attachment ALIAS FOR $1; mime_boundary ALIAS FOR $2; mime_header TEXT; str TEXT; BEGIN mime_header = ''--''||mime_boundary||''\nContent-Type: text/plain; name=document.txt\n''; mime_header = mime_header||''Content-Transfer-Encoding: 7bit\n''; mime_header = mime_header||''Content-Disposition: inline; filename="document.txt"\n''; str=substring(mail_attachment from ''Content-Type: application/msword.*''||mime_boundary); str=substring(str from ''\\n\\n.*\\n\\n''); str=split_part(str,''\\n\\n'',2); RETURN mime_header||f_doc2txt(str)||''--''||mime_boundary||''--''; END; 'LANGUAGE plpgsql; -- ======================================================================= CREATE OR REPLACE FUNCTION f_v_2() RETURNS trigger AS' DECLARE str text; mbx_name text; uniq_id text; mail_header text; mail_complete text; mime_boundary text; content_type TEXT=''Content-Type: application/msword''; x int; BEGIN SELECT INTO mbx_name mailboxes.name FROM mailboxes, messages WHERE mailboxes.mailbox_idnr=messages.mailbox_idnr AND messages.message_idnr=NEW.message_idnr; IF mbx_name = ''INBOX/v_2'' THEN SELECT INTO uniq_id unique_id FROM messages WHERE messages.message_idnr=NEW.message_idnr; SELECT INTO x count(*) FROM messages,messageblks WHERE messages.unique_id=uniq_id AND messageblks.message_idnr=NEW.message_idnr; IF x=1 THEN SELECT INTO mail_header messageblk FROM messageblks WHERE messageblk_idnr=NEW.messageblk_idnr-1; IF mail_header ~ ''multipart/mixed'' AND NEW.messageblk ~ content_type THEN mime_boundary=trim(both ''"'' from substring(mail_header from ''".*"'')); NEW.messageblk = f_get_document(NEW.messageblk,mime_boundary); END IF; END IF; END IF; RETURN NEW; END; 'LANGUAGE plpgsql; -- ======================================================================= CREATE TRIGGER tr_v_2 BEFORE INSERT ON messageblks FOR EACH ROW EXECUTE PROCEDURE f_v_2();