Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/06/2008, 09:35
Alextroy
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 9 meses
Puntos: 0
Procedimiento de envio de correo

Hola, una vez mas recurro a este foro para ver si me sacais otra vez las castañas del fuego...

He encontrado en la red el siguiente procedimiento PL/SQL para enviar correos desde Oracle cuando se está agotando el espacio en un tablespace:

CREATE OR REPLACE PROCEDURE SEND_MAIL(SENDER IN VARCHAR2, RECIPIENT IN VARCHAR2, SUBJECT IN VARCHAR2, MESSAGE IN VARCHAR2) IS
-- SENDER: direccion de correo de quien envia el mail
-- RECIPIENT: dirreción de correo a la que va dirigida el mail
-- SUBJECT: Es el asunto del correo
-- MESSAGE: es el texto del mensaje
mailhost CONSTANT VARCHAR2(30) := srv.mail.es; -- servidor de correo , sustituir cadena por una valida
mesg VARCHAR2(1000); -- texto del mensaje
mail_conn UTL_SMTP.CONNECTION; -- conexion con el servidor smtp
BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);
mesg := 'Date: ' ||
TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || CHR(13) || CHR(10) ||
'From: <'|| Sender ||'>' || CHR(13) || CHR(10) ||
'Subject: '|| Subject || CHR(13) || CHR(10)||
'To: <'||Recipient || CHR(13) || CHR(10) || '>' || CHR(13) || CHR(10) || Message;
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, Sender);
utl_smtp.rcpt(mail_conn, Recipient);
utl_smtp.data(mail_conn, message);
utl_smtp.quit(mail_conn);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20004,SQLERRM);
END send_mail;
/



La cadena del procedimiento que tras generar la alerta envia los parámetros al procedimiento SEND_MAIL es la siguiente:

send_mail('[email protected]','correo.desti [email protected]',
'ALERTA DE ESPACIO EN BASE DE DATOS ' || v_bbdd ,
'El tablespace ' || c_nombre || ' se esta quedando sin espacio' ||chr(10)||
'El espacio restante es de: ' || c_libre || ' Megas');


donde:
v_bbdd es el nombre de la base de datos
c_nombre es el nombre del tablespace
c_libre es el espacio que queda libre

El caso es que todo funciona correctamente a excepción de dos cosas:

cuando recibo el correo , en el para me aparece "undisclosed-recipient". No he indagado demasiado en el tema, pero presiento que es posible que esto tenga mas que ver con el servidor de correo, en cualquier caso no me es algo crítico.

Lo que si es problemático es que que "asunto" aparece en blanco. Es decir, da la sensación de que no está recibiendo el parámetro subject o si lo hace por algún motivo no lo está mostrando...

He pensado que el problema podria estar aqui:

utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, Sender);
utl_smtp.rcpt(mail_conn, Recipient);
utl_smtp.data(mail_conn, message);
utl_smtp.quit(mail_conn);


Pero digo esto desde una total ignorancia, ya que mis conocimientos de PL/SQL son muy escasos, pero me mosquea que aqui aparezcan todos los parámetros excepto el subject

Un saludo