07/11/2003, 06:22
|
| | | Fecha de Ingreso: marzo-2003 Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 10 meses Puntos: 2 | |
Oracle PL/SQL enviar correo con adjuntos Hola a todos;
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:
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;
Si me ayudais con esto... flipo....
Un saludo
Txarly
__________________ ¿Por qué Uri Geller doblaba cucharas? |