- Se incorporó
- 15 Enero 2004
- Mensajes
- 11.871
Buenas tardes gente de bien. Hace meses que no escribo ningún artículo porque este año hemos tenido demasiadas migraciones y proyectos en la pega así que me queda poco tiempo para la procastinación (hecho lamentable, lo sé).
Una de esas migraciones es llevar nuestro correo desde Exchange On Premise hacia Office 365. Yo no llevo ese proyecto porque no es mi especialidad pero si me afecta: la base de datos Oracle envía correos utilizando Exchange para salir y el pasar a Office 365 me implica hacer un ajuste.
Estuve googleando mucho buscando un tutorial que me de los pasos pero en sitios web guachos de oracle encontré la pista. Vamos a ello.
Mi situación actual:
Mi Exchange on-premise tiene autorizada la IP de mi servidor de base de datos para envío de correos, así que cuando quiero enviar un mail desde la base de datos uso un procedimiento almacenado (plsql) como esto:
Luego llamo al procedimiento almacenado y sale el correo. Simple, no?
Ok, pero mi Exchange on-premise va a dormir el sueño de los justos pues utilizaremos Office 365 y mi base de datos Oracle ahora tiene que mirar hacia allá, así que esa configuración que les mostré ya no va a funcionar más. ¿Y qué se hace?
1.- Descargar certificados
Mi administrador del correo me envió los enlaces para descargar los certificados DigiCert Global Root CA y Microsoft RSA Root Certificate Authority 2017. Me descargué ambos.
2.- Crear un directorio dentro del servidor de base de datos con la cuenta de sistema operativo que usa la base de datos (generalmente la cuenta oracle). Ese directorio será la ubicación de la wallet.
# mkdir -p /u01/app/oracle/wallet
3.- Copiar los certificados descargados en el punto 1 en esa misma ruta
4.- usando la cuenta de sistema operativo que usa la base de datos (la misma del paso 2, cargar los certificados que ustedes previamente copiaron en el paso 3. En verde los valores definidos por ustedes.
# orapki wallet add -wallet /u01/app/oracle/wallet -trusted_cert -cert "/u01/app/oracle/wallet/ElCertificadoDigiCertGlobalRootCA.crt" -pwd UnaPasswordCualquiera
# orapki wallet add -wallet /u01/app/oracle/wallet -trusted_cert -cert "/u01/app/oracle/wallet/ElCertificadoMicrosoftRSARootCertificateAuthority.crt" -pwd UnaPasswordCualquiera
Pónganle la contraseña que se les cante pero deben recordarla.
5.- Ahora el bloque plsql para enviar correos debe incluir dos llamadas más: la ubicación de la wallet que indicamos en el paso 2) y la contraseña (que definimos en el paso 4). Es así:
Igual el administrador de Office 365 les tiene que dar permiso a la IP pero por lo menos con esa configuración puede enviar correos a casillas externas como gmail, hotmail, geocities, etc.
Eso es todo, adelante estudios.
Saludos a la gente de Academia Database, mi casa de estudios virtual. Si quieren adentrarse en el desopilante mundo de Oracle éste es su lugar.
Una de esas migraciones es llevar nuestro correo desde Exchange On Premise hacia Office 365. Yo no llevo ese proyecto porque no es mi especialidad pero si me afecta: la base de datos Oracle envía correos utilizando Exchange para salir y el pasar a Office 365 me implica hacer un ajuste.
Estuve googleando mucho buscando un tutorial que me de los pasos pero en sitios web guachos de oracle encontré la pista. Vamos a ello.
Mi situación actual:
Mi Exchange on-premise tiene autorizada la IP de mi servidor de base de datos para envío de correos, así que cuando quiero enviar un mail desde la base de datos uso un procedimiento almacenado (plsql) como esto:
Código:
CREATE OR REPLACE PROCEDURE MONITOREO.PRC_ENVIACORREO
AS
VAR_PARA VARCHAR2(200);
VAR_DESDE VARCHAR2(200);
VAR_SMTP_SERVER VARCHAR2(200);
VAR_BASEDATOS VARCHAR2(200);
VAR_SUBJECT VARCHAR2(200);
l_mail_conn UTL_SMTP.connection;
l_boundary VARCHAR2(50) := '----=*#abc1234321cba#*=';
BEGIN
-- Servidor de correos
VAR_SMTP_SERVER := 'ExchangeDeCapa9.local';
VAR_DESDE := '[email protected]';
-- El destinatario está hardcodeado para efectos del tutorial
VAR_PARA := '[email protected]';
select sys_context('userenv','db_name') INTO VAR_BASEDATOS
from dual;
-- Envía correo de resumen
l_mail_conn := UTL_SMTP.open_connection(VAR_SMTP_SERVER, 25);
UTL_SMTP.helo(l_mail_conn, VAR_SMTP_SERVER);
UTL_SMTP.mail(l_mail_conn, VAR_DESDE);
UTL_SMTP.rcpt(l_mail_conn, VAR_PARA);
UTL_SMTP.open_data(l_mail_conn);
UTL_SMTP.WRITE_DATA(l_mail_conn, 'To: ' || VAR_PARA || UTL_TCP.crlf);
UTL_SMTP.WRITE_DATA(l_mail_conn, 'Subject: ' || 'Base de datos: ' || VAR_BASEDATOS || ' ' || VAR_SUBJECT || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: text/html; charset="UTF-8"' || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Prueba de correo enviado por el servidor ' || VAR_SMTP_SERVER);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.CLOSE_DATA(l_mail_conn);
UTL_SMTP.QUIT(l_mail_conn);
END;
/
Luego llamo al procedimiento almacenado y sale el correo. Simple, no?
Ok, pero mi Exchange on-premise va a dormir el sueño de los justos pues utilizaremos Office 365 y mi base de datos Oracle ahora tiene que mirar hacia allá, así que esa configuración que les mostré ya no va a funcionar más. ¿Y qué se hace?
1.- Descargar certificados
Mi administrador del correo me envió los enlaces para descargar los certificados DigiCert Global Root CA y Microsoft RSA Root Certificate Authority 2017. Me descargué ambos.
2.- Crear un directorio dentro del servidor de base de datos con la cuenta de sistema operativo que usa la base de datos (generalmente la cuenta oracle). Ese directorio será la ubicación de la wallet.
# mkdir -p /u01/app/oracle/wallet
3.- Copiar los certificados descargados en el punto 1 en esa misma ruta
4.- usando la cuenta de sistema operativo que usa la base de datos (la misma del paso 2, cargar los certificados que ustedes previamente copiaron en el paso 3. En verde los valores definidos por ustedes.
# orapki wallet add -wallet /u01/app/oracle/wallet -trusted_cert -cert "/u01/app/oracle/wallet/ElCertificadoDigiCertGlobalRootCA.crt" -pwd UnaPasswordCualquiera
# orapki wallet add -wallet /u01/app/oracle/wallet -trusted_cert -cert "/u01/app/oracle/wallet/ElCertificadoMicrosoftRSARootCertificateAuthority.crt" -pwd UnaPasswordCualquiera
Pónganle la contraseña que se les cante pero deben recordarla.
5.- Ahora el bloque plsql para enviar correos debe incluir dos llamadas más: la ubicación de la wallet que indicamos en el paso 2) y la contraseña (que definimos en el paso 4). Es así:
Código:
CREATE OR REPLACE PROCEDURE MONITOREO.PRC_ENVIACORREO
AS
VAR_PARA VARCHAR2(200);
VAR_DESDE VARCHAR2(200);
VAR_SMTP_SERVER VARCHAR2(200);
VAR_BASEDATOS VARCHAR2(200);
VAR_SUBJECT VARCHAR2(200);
l_mail_conn UTL_SMTP.connection;
l_boundary VARCHAR2(50) := '----=*#abc1234321cba#*=';
BEGIN
-- Servidor de correos
VAR_SMTP_SERVER := 'capa9.mail.ohmygood.outlook.com';
VAR_DESDE := '[email protected]';
-- El destinatario está hardcodeado para efectos del tutorial
VAR_PARA := '[email protected]';
select sys_context('userenv','db_name') INTO VAR_BASEDATOS
from dual;
-- Envía correo de resumen
l_mail_conn := UTL_SMTP.open_connection(
host => VAR_SMTP_SERVER,
port => 25,
wallet_path => '/u01/app/oracle/wallet',
wallet_password => 'UnaPasswordCualquiera',
secure_connection_before_smtp => FALSE
);
UTL_SMTP.helo(l_mail_conn, VAR_SMTP_SERVER);
UTL_SMTP.mail(l_mail_conn, VAR_DESDE);
UTL_SMTP.rcpt(l_mail_conn, VAR_PARA);
UTL_SMTP.open_data(l_mail_conn);
UTL_SMTP.WRITE_DATA(l_mail_conn, 'To: ' || VAR_PARA || UTL_TCP.crlf);
UTL_SMTP.WRITE_DATA(l_mail_conn, 'Subject: ' || 'Base de datos: ' || VAR_BASEDATOS || ' ' || VAR_SUBJECT || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: text/html; charset="UTF-8"' || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Prueba de correo enviado por el servidor ' || VAR_SMTP_SERVER);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.CLOSE_DATA(l_mail_conn);
UTL_SMTP.QUIT(l_mail_conn);
END;
/
Igual el administrador de Office 365 les tiene que dar permiso a la IP pero por lo menos con esa configuración puede enviar correos a casillas externas como gmail, hotmail, geocities, etc.
Eso es todo, adelante estudios.
Saludos a la gente de Academia Database, mi casa de estudios virtual. Si quieren adentrarse en el desopilante mundo de Oracle éste es su lugar.
Home
academia.cafedatabase.com