Inicio > Oracle > Oracle 11g Configura y prueba envio de correo desde Store procedure

Oracle 11g Configura y prueba envio de correo desde Store procedure

Primero se define ACL para el usuario que tendra el codigo de envio de correos, luego creamos el store procedure y por ultimo probamos el codigo. Cabe aclarar que el codigo solo te permite enviar a un solo destinatario.

Definiendo la regla ACL: Access Control List
utl_mail.xml .- Es el nombre del archivo donde quedara asignada
USRCORREO.- Es el usuario que tendra permiso para usar el correo.
servidordecorreo.com.mx.- Tu Servidor de correo
9025.- Rango de puertos de tu correo

begin
dbms_network_acl_admin.create_acl (
acl         => ‘utl_mail.xml’,
description => ‘Allow mail to be send’,
principal   => ‘USRCORREO’,
is_grant    => TRUE,
privilege   => ‘connect’
);
dbms_network_acl_admin.add_privilege (
acl       => ‘utl_mail.xml’,
principal => ‘USRCORREO’,
is_grant  => TRUE,
privilege => ‘resolve’
);
dbms_network_acl_admin.assign_acl(
acl  => ‘utl_mail.xml’,
host => ‘servidordecorreo.com.mx’,
lower_port => 9025,
upper_port => 9025
);
commit;
end;

Creando el Store Procedure para el usuario usrcorreo:

create or replace PROCEDURE ENVIA_CORREO (
p_De IN VARCHAR2,
p_Para IN VARCHAR2,
p_Encabezado IN VARCHAR2,
p_Mensaje IN VARCHAR2
)
AS
l_mailhost VARCHAR2 (255) := ‘servidordecorreo.com.mx’;
l_mail_conn UTL_SMTP.connection;
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
UTL_SMTP.WRITE_DATA(l_mail_conn, name || ‘: ‘ || header || UTL_TCP.CRLF);
END;

BEGIN
l_mail_conn := UTL_SMTP.OPEN_CONNECTION(‘servidordecorreo.com.mx’, 9025);
UTL_SMTP.HELO(l_mail_conn, ‘servidordecorreo.com.mx’);
utl_smtp.command( l_mail_conn, ‘AUTH LOGIN’);
utl_smtp.command( l_mail_conn, utl_raw.cast_to_varchar2( utl_encode.base64_encode( utl_raw.cast_to_raw( ‘Usuario_que_se_autentifica’ ))) );
utl_smtp.command( l_mail_conn, utl_raw.cast_to_varchar2( utl_encode.base64_encode( utl_raw.cast_to_raw( ‘Password_de_cta_autentificada’ ))) );

UTL_SMTP.MAIL(l_mail_conn, ‘Correo_de_cta_autentificada@correo.com.mx’);
UTL_SMTP.RCPT(l_mail_conn, p_Para);
UTL_SMTP.OPEN_DATA(l_mail_conn);
send_header(‘From’,    p_De);
send_header(‘To’,      p_Para);
send_header(‘Subject’, p_Encabezado);
UTL_SMTP.WRITE_DATA(l_mail_conn, UTL_TCP.CRLF || p_Mensaje);
UTL_SMTP.CLOSE_DATA(l_mail_conn);
UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
BEGIN
UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
NULL; — When the SMTP server is down or unavailable, we don’t have
— a connection to the server. The QUIT call will raise an
— exception that we can ignore.
END;
raise_application_error(-20000,
‘Failed to send mail due to the following error: ‘ || sqlerrm);
END;

Probando el store procedure…
exec USRCORREO.ENVIA_CORREO (‘»Roberto M» <correo_que_envia@tucorreo.com.mx>’,’correo_destino@ctacorreodestino.com’,’Pruebas de correo’,’Cuerpo del correo electronico desde Base Oracle 11g’);

Categorías: Oracle
  1. No hay comentarios aún.
  1. No trackbacks yet.

Deja un comentario