Para enviar correos por medio de procedures en Oracle, es necesario contar con la Utileria de Mail (UTL_MAIL). Es importante definir un servidor de correos previamente configurado, preguntar con Sistema Operativo o en su defecto anexar la opcion -v en el comando mailx para ejecutar el 'verbose' e identificar cual es el servidor de correos.
-->Revisar cual es nuestro servidor de correos
Al ejecutar el comando mailx con la opcion -v nos mostrara una salida como la siguiente:
nombre-servidor:oracle:PATITO: /opt/oracle $ mailx -v -s hola ltorres@algo.com.mx
.
EOT
nombre-servidor:oracle:PATITO: /opt/oracle $ ltorres@algo.com.mx... Connecting to [127.0.0.1] via relay...
220 nombre-servidor.empresa.gob.mx ESMTP Sendmail 8.14.5+Sun/8.14.5; Fri, 17 Jul 2015 09:48:20 -0500 (CDT)
>>> EHLO nombre-servidor.empresa.gob.mx
250-nombre-servidor.empresa.gob.mx Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
>>> VERB
250 2.0.0 Verbose mode
>>> MAIL From:<oracle@nombre-servidor.empresa.gob.mx> SIZE=59
250 2.1.0 <oracle@nombre-servidor.empresa.gob.mx>... Sender ok
>>> RCPT To:<ltorres@algo.com.mx>
>>> DATA
250 2.1.5 <ltorres@algo.com.mx>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
050 <ltorres@algo.com.mx>... Connecting to mx.algo.com.mx. via esmtp...
050 220 MX.algo.com.mx Microsoft ESMTP MAIL Service ready at Fri, 17 Jul 2015 09:40:19 -0500
050 >>> EHLO nombre-servidor.empresa.gob.mx
050 250-MX.algo.com.mx Hello [160.41.90.120]
050 250-SIZE
050 250-PIPELINING
050 250-DSN
050 250-ENHANCEDSTATUSCODES
050 250-STARTTLS
050 250-X-ANONYMOUSTLS
050 250-AUTH NTLM
050 250-X-EXPS GSSAPI NTLM
050 250-8BITMIME
050 250-BINARYMIME
050 250-CHUNKING
050 250-XEXCH50
050 250-XRDST
050 250 XSHADOW
050 >>> STARTTLS
050 220 2.0.0 SMTP server ready
050 >>> EHLO nombre-servidor.empresa.gob.mx
050 250-MX.algo.com.mx Hello [160.41.90.120]
050 250-SIZE
050 250-PIPELINING
050 250-DSN
050 250-ENHANCEDSTATUSCODES
050 250-AUTH NTLM LOGIN
050 250-X-EXPS GSSAPI NTLM
050 250-8BITMIME
050 250-BINARYMIME
050 250-CHUNKING
050 250-XEXCH50
050 250-XRDST
050 250 XSHADOW
050 >>> MAIL From:<oracle@nombre-servidor.empresa.gob.mx> SIZE=387
050 250 2.1.0 Sender OK
050 >>> RCPT To:<ltorres@algo.com.mx>
050 >>> DATA
050 250 2.1.5 Recipient OK
050 354 Start mail input; end with <CRLF>.<CRLF>
050 >>> .
050 250 2.6.0 <201507171448.t6HEmJmT021843@nombre-servidor.empresa.gob.mx> [InternalId=1734250] Queued mail for delivery
050 <ltorres@algo.com.mx>... Sent (<201507171448.t6HEmJmT021843@nombre-servidor.empresa.gob.mx> [InternalId=1734250] Queued mail for delivery)
250 2.0.0 t6HEmKOt021844 Message accepted for delivery
ltorres@algo.com.mx... Sent (t6HEmKOt021844 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 nombre-servidor.empresa.gob.mx closing connection
El nombre del servidor de correo aparece como MX.algo.com.mx
--->Revisar si esta habilitada la Utileria de Mail
--Ir a sql y ejecutar lo siguiente
desc UTL_MAIL
Si aparece que no existe el objeto entonces:
-->Instalar las siguientes librerias
--Ir a sql y ejecutar lo siguiente
@?/rdbms/admin/utlmail.sql
@?/rdbms/admin/prvtmail.plb
--->Anexar el servidor SMTP con el servidor de correos antes mancionado y el puerto default 25
ALTER SYSTEM SET smtp_out_server='MX.algo.com.mx:25' SCOPE=BOTH;
--->El usuario dueño del procedure necesita permisos sobre la Utileria de Mail (UTL_MAIL)
GRANT execute ON utl_mail TO USUARIO;
--->Ejemplos de como mandar mensajes con esta Utileria de Mail
Ejemplo 1
exec UTL_MAIL.SEND(sender=>'Seguridad@empresa.com', recipients=>'ltorres@algo.com.mx', subject=>'Testmail', message => 'Hola');
Ejemplo 2
create or replace PROCEDURE ltorresin
IS
mailhost VARCHAR2(64) := 'MX.algo.mx';
sender VARCHAR2(64) := 'Seguridad@empresa.com';
recipient VARCHAR2(64) := ''ltorres@algo.com.mx';
mail_conn utl_smtp.connection;
BEGIN
mail_conn := utl_smtp.open_connection(mailhost,25);
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
utl_smtp.open_data(mail_conn);
utl_smtp.write_data(mail_conn, 'This is a test message.' || chr(20));
utl_smtp.write_data(mail_conn, 'This is line 2.' || chr(20));
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
END;
/
Ejemplo 3
begin
UTL_MAIL.send(
sender => 'Seguridad@empresa.com',
recipients => 'ltorres@algo.com.mx',
subject => 'Advertencia',
message => 'Este es un mensaje de prueba');
end;
/