Utilizo procedimientos almacenados de Oracle en PL/SQL y tengo un procedimiento para enviar correos que funciona bien cuando envio texto plano, pero ahora además se quiere que pueda adjuntar ficheros a los correos. ¿alguien conoce como se puede hacer? Los ficheros que envio los cargo en una tabla de la base de datos en formato BLOB, supongo que de alguna forma los tengo que leer de allí y adjuntarlos al correo, ¿¿¿pero como???
Aqui les pongo el código de mi función SEND_MAIL:
Código:
Si me ayudais con esto... flipo....PROCEDURE AU_GN_SEND_MAIL(sender IN VARCHAR2, recipient IN VARCHAR2, ccrecipient IN VARCHAR2, subject IN VARCHAR2, message IN VARCHAR2, blnResultado IN OUT BOOLEAN) IS crlf VARCHAR2(2):= UTL_TCP.CRLF; connection utl_smtp.connection; mailhost VARCHAR2(30) := 'aqui ip de server; header VARCHAR2(1000); arrayRECIPIENTS AU_GN_GENERAL.array_VARCHAR2; arrayCCRECIPIENTS AU_GN_GENERAL.array_VARCHAR2; i NUMBER:=0; j NUMBER:=0; v_recipient VARCHAR2(100) := ''; v_ccrecipient VARCHAR2(100) := ''; hd_recipient VARCHAR2(1000) := ''; hd_ccrecipient VARCHAR2(1000) := ''; BEGIN -- Start the connection. connection := utl_smtp.open_connection(mailhost,25); hd_recipient := REPLACE(recipient, '|', ','); hd_ccrecipient := REPLACE(ccrecipient, '|', ','); header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf|| 'From: '||sender||''||crlf|| 'Subject: '||subject||crlf|| 'To: '||hd_recipient||crlf|| 'CC: '||hd_ccrecipient; -- Handshake with the SMTP server utl_smtp.helo(connection, mailhost); utl_smtp.mail(connection, sender); IF recipient IS NOT NULL THEN arrayRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(recipient, '|'); FOR i IN arrayRECIPIENTS.FIRST..arrayRECIPIENTS.LAST LOOP v_recipient := arrayRECIPIENTS(i); IF (v_recipient IS NOT NULL OR v_recipient != '') THEN utl_smtp.rcpt(connection, v_recipient); END IF; END LOOP; END IF; IF ccrecipient IS NOT NULL THEN arrayCCRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(ccrecipient, '|'); FOR j IN arrayCCRECIPIENTS.FIRST..arrayCCRECIPIENTS.LAST LOOP v_ccrecipient := arrayCCRECIPIENTS(j); IF (v_ccrecipient IS NOT NULL OR v_ccrecipient != '') THEN utl_smtp.rcpt(connection, v_ccrecipient); END IF; END LOOP; END IF; IF recipient IS NULL AND ccrecipient IS NULL THEN dbms_output.put_line(' Mail NO sent.'); blnResultado := false; ELSE utl_smtp.open_data(connection); -- Write the header utl_smtp.write_data(connection, header); utl_smtp.write_data(connection, crlf ||message); utl_smtp.close_data(connection); dbms_output.put_line(' Mail sent.'); blnResultado := true; END IF; utl_smtp.quit(connection); EXCEPTION WHEN UTL_SMTP.INVALID_OPERATION THEN dbms_output.put_line(' Invalid Operation in SMTP transaction.'); blnResultado := false; WHEN UTL_SMTP.TRANSIENT_ERROR THEN dbms_output.put_line(' Temporary problems with sending email - try again later.'); blnResultado := false; WHEN UTL_SMTP.PERMANENT_ERROR THEN dbms_output.put_line(' Errors in code for SMTP transaction.'); blnResultado := false; END;
Un saludo
Txarly