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.
