MANDAR CORREO DESDE BASE DE DATOS

marta
05 de Mayo del 2005
Hola a todos
me gustaria que al insertar en una tabla mandara un e-mail creo que es con el paquete utl_smpt pero ¿este paquete esta instalad por defecto? y alguien me puede ayudar en su uso?
muchas gracias de antemano

MBRAVO
05 de Mayo del 2005
Es posible enviar un correo, desde un procedure o package.
Te pongo un ejemplo de uso:

PROCEDURE sp_envia_mail (p_msg_subject IN VARCHAR2,
p_msg_text IN VARCHAR2,
p_login IN VARCHAR2,
p_val_param IN VARCHAR2,
p_filename IN VARCHAR2) IS
c sys.utl_smtp.connection;
rc INTEGER;
msg_from VARCHAR2(50) := 'Oracle9.2';
mailhost VARCHAR2(30) := 'xxxEXCH1'; -- Nombre de tu servidor de correo
v_msg_text VARCHAR2(1000);
v_msg_to VARCHAR2(200);
v_r BOOLEAN;
p_Fh UTL_FILE.FILE_TYPE;
v_string VARCHAR2(200);

BEGIN
c:= utl_smtp.open_connection(mailhost,25); -- Nombre del Host
sys.utl_smtp.helo(c, mailhost);
sys.utl_smtp.mail(c, msg_from);
-- Busca el usuario a enviar el correo --
BEGIN
IF p_login IS NOT NULL THEN
v_msg_to := trim(p_login)||lc_mail;
v_msg_text := trim(p_msg_text);
ELSE
v_msg_to := 'default'||lc_mail; -- si no existe un usuario default
v_msg_text := 'EL usuario no existe en el Correo para '||p_sucu;
END IF;
END;

sys.utl_smtp.rcpt(c, v_msg_to);
sys.utl_smtp.open_data (c);
sys.utl_smtp.write_data(c, 'From: [email protected]' || utl_tcp.crlf);-- El usuario el cual envia el correo
sys.utl_smtp.write_data(C, 'To: '|| v_msg_to || utl_tcp.crlf);-- ||
sys.utl_smtp.write_data(C, 'Subject: ' || p_msg_subject || utl_tcp.crlf); -- asunto
sys.utl_smtp.write_data(C, v_msg_text|| utl_tcp.crlf); -- || v_msg_text); -- mensaje de texto

-- enviando mas información leyendo un archivo texto --
ptxt.abre(p_val_param,p_filename,'r',p_fh,v_r);
ptxt.lee(p_fh,v_string,v_r);

WHILE v_r LOOP
utl_smtp.write_data(c,v_string||utl_tcp.crlf);
ptxt.lee(p_fh,v_string,v_r);
END LOOP;
ptxt.cie(p_fh,v_r);
utl_smtp.close_data(c);
utl_smtp.quit(c);
EXCEPTION
WHEN utl_smtp.invalid_operation THEN
DBMS_OUTPUT.PUT_LINE('Operacion invalida mail ');
WHEN utl_smtp.transient_error THEN
DBMS_OUTPUT.PUT_LINE('Temporary Operacion invalida mail ');
WHEN utl_smtp.permanent_error THEN
DBMS_OUTPUT.PUT_LINE('Permanent Operacion invalida mail ');
END sp_envia_mail;


jc3000
05 de Mayo del 2005
Abrete la especificacion del paquete UTL_SMTP ( es de SYS ) y ahí veras un pequeño ejemplo.

Es sencillo, solo copia las 10-11 lineas de codigo que tiene y cambia sus valores por los tuyos.