El propósito de este laboratorio será enviar correos electrónicos utilizando un servidor de correos local, instalado en un servidor con Oracle Linux 7, y probar su funcionamiento por medio de una función en Oracle Apex.

Instalación de Postfix:

Lo primero que debemos hacer es configurar postfix, en este caso será en un servidor con Oracle Linux 7, para ello debemos instalar el paquete:

yum  install postfix

Crearemos el archivo de acceso hacía nuestro correo electrónico, este correo será el remitente y debemos asegurarnos que la opción de fuentes no confiables este inhabilitada de lo contrario postfix no podrá conectarse:

echo 'smtp.gmail.com <correo>:<contraseña>' > /etc/postfix/sasl_passwd   

Luego encriptaremos los datos del archivo:

postmap hash:/etc/postfix/sasl_passwd

Por último seguiremos la siguiente serie de pasos:

cd /etc/posfix
cp main.cf main.cf.bk
vi main.cf 

Debemos verificar que al final del archivo la información se encuentre de la siguiente forma:

smtp_sasl_auth_enable = yes  
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd  
smtp_sasl_security_options = noanonymous 
smtp_tls_security_level = secure 
smtp_tls_mandatory_protocols = TLSv1  
smtp_tls_mandatory_ciphers = high 
smtp_tls_secure_cert_match = nexthop 
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt 
relayhost = smtp.gmail.com:587 

Reiniciamos el servicio:

systemctl restart postfix
Verificamos que el servicio este up

Configuración de permisos ACL en la base de datos:

Ahora debemos configurar un ACL que nos permita la salida de request desde nuestra base de datos, debemos conectarnos con el usuario sys a la base de datos y ejecutar el siguiente acl, este es para una base de datos versión 18c:

BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => '*',
         ace => xs$ace_type(privilege_list => xs$name_list('connect', 'resolve'),
                            principal_name => 'APEX_190100',
                            principal_type => xs_acl.ptype_db));
 END;

Lo resaltado en negrita es el nombre de la versión de apex instalada en nuestra base de datos, debemos revisar que versión utilizamos, buscar su schema correspondiente y colocarlo entre las comillas de principal_name, en mi caso es la versión 19.1.

Configuración de Instancia Oracle Apex:

Debemos configurar nuestra instancia en apex para que este pueda comunicarse al servidor de postfix:

Ingresamos a las configuraciones de nuestra instancia INTERNAL:

Vamos al tab de Email y configuramos lo siguiente:

Para esta prueba, apex esta instalo en el mismo servidor donde se configuró postfix, por ende se colocó localhost, colocamos el puerto 25 ya que es el default para SMTP

Guardamos los cambios y ahora debemos crear la función que nos permita el envío de correos por medio de apex:

create or replace function "ENVIO_CORREO"
 (
      p_to IN VARCHAR2,
      p_subj IN NVARCHAR2,
      p_body IN NVARCHAR2
 )
 return VARCHAR2
 is
 respuesta varchar2(20);
 BEGIN
 apex_mail.send(
   p_from => 'emmanuelguzman96@gmail.com',
   p_to => p_to,
   p_subj => p_subj,
   p_body => p_body,
   p_body_html => p_body
 );
 APEX_MAIL.PUSH_QUEUE('localhost',25); --Libera la cola de correos de Apex
   respuesta := 'Correo Envíado';
 return respuesta;
 END;

APEX_MAIL.PUSH_QUEUE nos permitirá envíar los correos instantaneamente, ya que sin este parámentro el correo se enviará varios segundos después de haber ejecutado el script.

Probamos la función:

DECLARE
 respuesta VARCHAR2(50);
BEGIN
 respuesta := ENVIO_CORREO('emmanuelguzman96@gmail.com','Prueba de Envío','Este es un correo de prueba');
END;

Verificamos que el correo haya llegado:

De esta manera logramos enviar correos electrónicos desde Oracle Apex.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *