Tened en cuenta que debereis cambiar el valor de las constantes que cito a continuacion a vuestro entorno de trabajo. En esencia son los datos del servidor de correo smtp que useis para enviar los mails.
Constantes que deberis adaptar a vuestro entorno de trabajo.
- Código: Seleccionar todo
SMTP_FROM CONSTANT varchar2(60) := 'notificaciones@empresa.com';
SMTP_HOST CONSTANT varchar2(60) := 'correo.empresa.com';
SMTP_PORT CONSTANT number(2) := 25;
Package - Definción:
- Código: Seleccionar todo
create or replace package notificaciones is
type lista_mails_type is table of varchar2(120) index by binary_integer;
procedure enviar_mail(p_to in lista_mails_type, p_asunto in varchar2, p_mensaje in varchar2);
end;
Package Body - Implementación:
- Código: Seleccionar todo
create or replace package body notificaciones is
procedure enviar_mail(p_to in lista_mails_type, p_asunto in varchar2, p_mensaje in varchar2) is
SMTP_FROM CONSTANT varchar2(60) := 'notificaciones@empresa.com';
SMTP_HOST CONSTANT varchar2(60) := 'correo.empresa.com';
SMTP_PORT CONSTANT number(2) := 25;
CRLF CONSTANT varchar2(2) := chr(13) || chr(10);
v_to varchar2(1024);
v_msg varchar2(2048);
v_mail_conn UTL_SMTP.connection;
begin
v_mail_conn := UTL_SMTP.open_connection(SMTP_HOST, SMTP_PORT);
UTL_SMTP.helo(v_mail_conn, SMTP_HOST);
UTL_SMTP.mail(v_mail_conn, SMTP_FROM);
for i in p_to.first..p_to.last loop
UTL_SMTP.rcpt(v_mail_conn, p_to(i));
v_to := v_to ||p_to(i)||';';
end loop;
v_to := rtrim(v_to,';');
v_msg := 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss') || CRLF ||
'From: <'|| SMTP_FROM ||'>' || crlf ||
'Subject: '|| p_asunto || crlf ||
'To: '||v_to || crlf || '' || crlf || p_mensaje;
UTL_SMTP.data(v_mail_conn, v_msg);
UTL_SMTP.quit(v_mail_conn);
end;
end;
Ejemplos de uso del package notificaciones:
Ejemplo 1:
- Código: Seleccionar todo
declare
v_lista_mails notificaciones.lista_mails_type;
begin
v_lista_mails(1) := 'abuenafuente@empresa.com';
v_lista_mails(2) := 'jmmonzon@empresa.com';
notificaciones.enviar_mail(v_lista_mails, 'Test Mail' ,'Esto es una prueba de envio de mails');
end;
Imaginemos que los mails a notificar estan almacenados en una tabla de la BD:
Ejemplo 2:
- Código: Seleccionar todo
declare
v_lista_mails notificaciones.lista_mails_type;
begin
select email
bulk collect into v_lista_mails
from mails_notificaciones
where activo = 1;
notificaciones.enviar_mail(v_lista_mails, 'Test Mail' ,'Esto es una prueba de envio de mails');
end;
Y esto es todo, espero os resulte útil.