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/postfix 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 = may 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

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:

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.