Enviar correo electrónico a base de datos de IA autónoma
Hay una serie de opciones para enviar correos electrónicos en Autonomous AI Database. También puede enviar mensajes de texto o la salida de una consulta SQL a un canal de Slack o MSTeams.
Enviar correo electrónico con el servicio Email Delivery en una base de datos de IA autónoma
Describe los pasos para enviar correos electrónicos mediante UTL_SMTP en Autonomous AI Database.
Para enviar correos electrónicos con el servicio Oracle Cloud Infrastructure Email Delivery:
-
Identifique el punto final de conexión SMTP para Email Delivery. Puede que necesite suscribirse a regiones adicionales de Oracle Cloud Infrastructure si Email Delivery No está Disponible en su Región Actual.
Por ejemplo, seleccione una de las siguientes opciones de punto final de conexión SMTP:
-
smtpTERM:us-phoenix-1.oraclecloud.com
-
smtpTERM:us-ashburn-1.oraclecloud.com
-
smtp.emailTERM:uk-london-1.oci.oraclecloud.com
-
smtp.emailTERM:eu-frankfurt-1.oci.oraclecloud.com
Nota
Nota: Si el punto final de conexión SMTP está en una región diferente a la de la base de datos de IA autónoma, debe crear una solicitud en Oracle Cloud Support para que Cloud Operations active el servicio Email Delivery de esa región para su base de datos de IA autónoma.Para obtener más información, consulte Configuración de la conexión SMTP.
-
-
Genere credenciales SMTP para Email Delivery.
UTL_SMTPutiliza credenciales para autenticarse con los servidores de Email Delivery al enviar correo electrónico.Consulte Generación de credenciales SMTP para un usuario para obtener más información.
-
Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "
From" conUTL_SMTP.MAIL.Consulte Gestión de emisores aprobados para más información.
-
Permitir el acceso SMTP para el usuario ADMIN agregando una entrada de control de acceso (ACE).
Por ejemplo:
BEGIN -- Allow SMTP access for user ADMIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db)); END; / -
Cree un procedimiento PL/SQL para enviar correo electrónico.
Por ejemplo, consulte el código de ejemplo que se muestra en SMTP Send Email Sample Code.
-
Envíe un correo electrónico de prueba mediante el procedimiento PL/SQL que ha creado en el paso 5.
Por ejemplo:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous AI Database', 'Sent using UTL_SMTP');
Consulte UTL_SMTP para obtener información sobre UTL_SMTP.
Consulte Notas del paquete PL/SQL para la base de datos de IA autónoma para conocer las restricciones de UTL_SMTP con la base de datos de IA autónoma.
Código de ejemplo de envío de correo electrónico SMTP
Muestra el código de ejemplo para enviar correo electrónico con UTL_SMTP en Autonomous AI Database.
CREATE OR REPLACE PROCEDURE SEND_MAIL (
msg_to varchar2,
msg_subject varchar2,
msg_text varchar2 )
IS
mail_conn utl_smtp.connection;
username varchar2(1000):= 'ocid1.user.oc1.username';
passwd varchar2(50):= 'password';
msg_from varchar2(50) := 'adam@example.com';
mailhost VARCHAR2(50) := 'smtp.us-ashburn-1.oraclecloud.com';
BEGIN
mail_conn := UTL_smtp.open_connection(mailhost, 587);
utl_smtp.starttls(mail_conn);
UTL_SMTP.AUTH(mail_conn, username, passwd, schemes => 'PLAIN');
utl_smtp.mail(mail_conn, msg_from);
utl_smtp.rcpt(mail_conn, msg_to);
UTL_smtp.open_data(mail_conn);
UTL_SMTP.write_data(mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'To: ' || msg_to || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'From: ' || msg_from || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'Subject: ' || msg_subject || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'Reply-To: ' || msg_to || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, msg_text || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_smtp.close_data(mail_conn);
UTL_smtp.quit(mail_conn);
EXCEPTION
WHEN UTL_smtp.transient_error OR UTL_smtp.permanent_error THEN
UTL_smtp.quit(mail_conn);
dbms_output.put_line(sqlerrm);
WHEN OTHERS THEN
UTL_smtp.quit(mail_conn);
dbms_output.put_line(sqlerrm);
END;
/Dónde:
-
mailhost: especifica el punto final de conexión SMTP del paso 1 en Enviar correo electrónico con el servicio Email Delivery en una base de datos de IA autónoma.
-
username: especifica el nombre de usuario de credencial SMTP del paso 2 en Enviar correo electrónico con el servicio Email Delivery en Autonomous AI Database.
-
passwd: especifica la contraseña de credencial SMTP del paso 2 enEnviar correo electrónico con el servicio Email Delivery en una base de datos de IA autónoma.
-
msg_from: especifica uno de los remitentes aprobados del paso 3 en Enviar correo electrónico con el servicio Email Delivery en una base de datos de IA autónoma.
Enviar correo electrónico con un proveedor de correo electrónico en un punto final privado
Describe los pasos para enviar correo electrónico con un proveedor de correo electrónico que está en el punto final privado.
Para enviar correo electrónico desde la base de datos de IA autónoma mediante un proveedor de correo electrónico en un punto final privado, se debe poder acceder al proveedor de correo electrónico desde la VCN de Oracle Cloud Infrastructure (punto final privado de la instancia de la base de datos de IA autónoma). Por ejemplo, puede acceder a un proveedor de correo electrónico cuando:
-
Tanto la instancia de base de datos de IA autónoma de origen como el proveedor de correo electrónico están en la misma VCN de Oracle Cloud Infrastructure.
-
La instancia de base de datos de IA autónoma de origen y el proveedor de correo electrónico están en diferentes redes virtuales en la nube de Oracle Cloud Infrastructure emparejadas.
-
El proveedor de correo electrónico está en una red local que está conectada a la VCN de Oracle Cloud Infrastructure de la instancia de base de datos de IA autónoma de origen mediante FastConnect o VPN.
Como requisito previo, para enviar correo electrónico mediante un proveedor de correo electrónico, defina las siguientes reglas de entrada y salida:
-
Defina una regla de salida en la lista de seguridad de subred o el grupo de seguridad de red de la base de datos de origen de modo que el tráfico al host de destino se permita en el puerto 587 o el puerto 25 (en función del puerto que esté utilizando).
-
Defina una regla de entrada en la lista de seguridad de subred o el grupo de seguridad de red del host de destino de forma que se permita el tráfico desde la dirección IP de la instancia de base de datos de IA autónoma de origen al puerto 587 o el puerto 25 (en función del puerto que esté utilizando).
Para enviar correo electrónico desde un proveedor de correo electrónico en un punto final privado:
-
Permitir el acceso SMTP para el usuario ADMIN agregando una entrada de control de acceso (ACE).
Por ejemplo:
-- Create an Access Control List for the host BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db), private_target => TRUE); END; /Nota
Nota:DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEsolo soporta un único nombre de host para el parámetrohost(en un punto final privado, no está soportado el uso de una dirección IP, una IP de SCAN o un nombre de host de SCAN).Si define la propiedad de base de datos
ROUTE_OUTBOUND_CONNECTIONS, no es necesario definir el parámetroprivate_targetenTRUEen esta API. Consulte Seguridad mejorada para conexiones salientes con puntos finales privados para obtener más información. -
Cree un procedimiento PL/SQL para enviar correo electrónico.
-
Envíe un correo electrónico de prueba mediante el procedimiento PL/SQL que ha creado en el paso 2.
Por ejemplo:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous AI Database', 'Sent using private email provider');
Uso de Objetos de Credenciales para Definir la Autenticación SMTP
Describe cómo transferir objetos de credencial a las API UTL_SMTP.SET_CREDENTIAL.
El subprograma SET_CREDENTIAL envía el comando AUTH para autenticarse en el servidor SMTP.
El subprograma UTL_SMTP.SET_CREDENTIAL permite transferir objetos de credenciales para definir la autenticación SMTP. Los objetos de credenciales son objetos de esquema, por lo que solo pueden acceder a ellos los usuarios con privilegios y le permiten configurar privilegios de nivel de esquema para controlar el acceso a las credenciales. La transferencia de objetos de credenciales es una forma adecuada y segura de almacenar y gestionar el nombre de usuario, la contraseña o las claves para la autenticación.
El subprograma UTL_SMTP.SET_CREDENTIAL es una alternativa segura y conveniente al subprograma UTL_SMTP.AUTH.
Ejemplo
...
UTL_SMTP.AUTH (l_mail_conn, 'ocid1.user.oc1.username', 'xxxxxxxxxxxx', schemes => 'PLAIN');
...Como se muestra en el ejemplo anterior, al llamar al subprograma AUTH, debe transferir el nombre de usuario/contraseña en texto no cifrado como parte de los parámetros formales PL/SQL. Es posible que necesite embeber el nombre de usuario/contraseña en varios scripts cron o de automatización PL/SQL. La transferencia de contraseñas de texto no cifrado es un problema de conformidad que se aborda en el subprograma UTL_SMTP.SET_CREDENTIAL.
Consulte Función y procedimiento AUTH para obtener más información.
Sintaxis de UTL_SMTP.SET_CREDENTIAL
PROCEDURE UTL_SMTP.SET_CREDENTIAL (
c IN OUT NOCOPY connection,
credential IN VARCHAR2,
schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES
);
FUNCTION UTL_SMTP.SET_CREDENTIAL (
c IN OUT NOCOPY connection,
credential IN VARCHAR2,
schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES)
RETURN reply;Ejemplo
- Cree un objeto de credencial:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'HTTP_CRED',
username => 'web_app_user',
password => '<password>' );
END;Esto crea un objeto de credencial que crea un par de nombre de usuario/contraseña almacenado.
Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.
Consulte Especificación de Credenciales de Trabajo del Planificador para obtener más información.
-
Ejecute el procedimiento
UTL_SMTP.SET_CREDENTIAL:DECLARE l_mail_conn UTL_SMTP.CONNECTION; BEGIN l_mail_conn := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 587); UTL_SMTP.SET_CREDENTIAL(l_mail_conn, 'SMTP_CRED', SCHEMES => 'PLAIN'); ... END;En este ejemplo, se envía el comando para autenticarse en el servidor SMTP. El servidor web necesita esta información para autorizar la solicitud. El valor
l_mail_connes la conexión SMTP,SMTP_CREDes el nombre de las credenciales yPLAINes el esquema de autenticación SMTP.
Consulte UTL_SMTP para obtener más información.
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_SMTP en la base de datos de IA autónoma.
Enviar correo electrónico desde la base de datos de IA autónoma mediante DBMS_CLOUD_NOTIFICATION
Utilice el paquete DBMS_CLOUD_NOTIFICATION para enviar mensajes y consultar los resultados como correo electrónico.
Enviar mensajes como correo electrónico desde la base de datos de IA autónoma
Puede utilizar DBMS_CLOUD_NOTIFICATION para enviar mensajes como correo electrónico.
-
Identifique el punto final de conexión SMTP para Email Delivery. Puede que necesite suscribirse a regiones adicionales de Oracle Cloud Infrastructure si Email Delivery No está Disponible en su Región Actual.
Por ejemplo, seleccione una de las siguientes opciones de punto final de conexión SMTP:
-
smtpTERM:us-phoenix-1.oraclecloud.com
-
smtpTERM:us-ashburn-1.oraclecloud.com
-
smtp.emailTERM:uk-london-1.oci.oraclecloud.com
-
smtp.emailTERM:eu-frankfurt-1.oci.oraclecloud.com
Para obtener más información, consulte Configuración de la conexión SMTP.
-
-
Genere credenciales SMTP para Email Delivery.
UTL_SMTPutiliza credenciales para autenticarse con los servidores de Email Delivery al enviar correo electrónico.Consulte Generación de credenciales SMTP para un usuario para obtener más información.
-
Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "
From" conUTL_SMTP.MAIL.Consulte Gestión de emisores aprobados para más información.
-
Permitir el acceso SMTP para el usuario ADMIN agregando una entrada de control de acceso (ACE).
Por ejemplo:
BEGIN -- Allow SMTP access for user ADMIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db)); END; / -
Cree un objeto de credencial y utilice
DBMS_CLOUD_NOTIFICATION.SEND_MESSAGEpara enviar un mensaje como correo electrónico.BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'EMAIL_CRED', username => 'username', password => 'password' ); END; / BEGIN DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE( provider => 'email', credential_name => 'EMAIL_CRED', message => 'Subject content', params => json_object('recipient' value 'mark@example.com, suresh@example.com', 'to_cc' value 'nicole@example.com, jordan@example.com', 'to_bcc' value 'manisha@example.com', 'subject' value 'Test subject', 'smtp_host' value 'smtp.email.example.com', 'sender' value 'approver_sender@example.com' ) ); END; /Utilice el parámetro
paramspara especificar el remitente, smtp_host, el asunto, el destinatario y los destinatarios de un CC o BCC en valoresstring.-
sender: especifica el ID de correo electrónico del remitente aprobado del paso 3.
-
smtp_host: especifica el nombre de host SMTP del paso 2.
-
subject: especifica el asunto del correo electrónico.
-
destinatario: especifica los ID de correo electrónico de los destinatarios. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios.
-
to_cc: especifica los ID de correo electrónico que están recibiendo un CC del correo electrónico. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios CC.
-
to_bcc: especifica los ID de correo electrónico que reciben un BCC del correo electrónico. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios de BCC.
Consulte Procedimiento SEND_MESSAGE para obtener más información.
-
Enviar resultados de consulta como correo electrónico desde la base de datos de IA autónoma
Puede utilizar el paquete DBMS_CLOUD_NOTIFICATION para enviar los resultados de una consulta como correo electrónico.
Para utilizar DBMS_CLOUD_NOTIFICATION para enviar correo:
-
Identifique el punto final de conexión SMTP para Email Delivery. Puede que necesite suscribirse a regiones de Oracle Cloud Infrastructure adicionales si Email Delivery No Está Disponible en su Región Actual.
Por ejemplo, seleccione una de las siguientes opciones de punto final de conexión SMTP:
-
smtpTERM:us-phoenix-1.oraclecloud.com
-
smtpTERM:us-ashburn-1.oraclecloud.com
-
smtp.emailTERM:uk-london-1.oci.oraclecloud.com
-
smtp.emailTERM:eu-frankfurt-1.oci.oraclecloud.com
Para obtener más información, consulte Configuración de la conexión SMTP.
-
-
Genere credenciales SMTP para Email Delivery.
UTL_SMTPutiliza credenciales para autenticarse con los servidores de Email Delivery al enviar correo electrónico.Consulte Generación de credenciales SMTP para un usuario para obtener más información.
-
Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "
From" conUTL_SMTP.MAIL.Consulte Gestión de emisores aprobados para más información.
-
Permitir el acceso SMTP para el usuario ADMIN agregando una entrada de control de acceso (ACE).
Por ejemplo:
BEGIN -- Allow SMTP access for user ADMIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db)); END; / -
Cree un objeto de credencial y utilice
DBMS_CLOUD_NOTIFICATION.SEND_DATApara enviar la salida de una consulta como correo electrónico.BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'EMAIL_CRED', username => 'username', password => 'password' ); END; / BEGIN DBMS_CLOUD_NOTIFICATION.SEND_DATA( provider => 'email', credential_name => 'EMAIL_CRED', query => 'SELECT tablespace_name FROM dba_tablespaces', params => json_object('recipient' value 'mark@example.com, suresh@example.com', 'to_cc' value 'nicole@example.com1, jordan@example.com', 'to_bcc' value 'manisha@example.com', 'subject' value 'Test subject', 'type' value 'json', 'title' value 'mytitle', 'message' value 'This is the message', 'smtp_host' value 'smtp.email.example.com', 'sender' value 'approver_sender@example.com' ) ); END; /Utilice el parámetro
paramspara especificar el remitente, smtp_host, el asunto, el destinatario, los destinatarios de un CC o BCC, el mensaje, el tipo de dato y el título en los valoresString.-
sender: especifica el ID de correo electrónico del remitente aprobado del paso 3.
-
smtp_host: especifica el nombre de host SMTP del paso 2.
-
subject: especifica el asunto del correo electrónico. El tamaño máximo es de 100 caracteres.
-
destinatario: especifica los ID de correo electrónico de los destinatarios. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios.
-
to_cc: especifica los ID de correo electrónico que están recibiendo un CC del correo electrónico. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios CC.
-
to_bcc: especifica los ID de correo electrónico que reciben un BCC del correo electrónico. Utilice una coma entre los ID de correo electrónico cuando haya varios destinatarios de BCC.
-
message: especifica el texto del mensaje.
-
type: especifica el formato de salida como CSV o JSON.
-
title: especifica el título de la asociación de la salida SQL. El título solo debe contener letras, dígitos, guiones bajos, guiones o puntos como caracteres en su valor debido a que se utiliza para generar un nombre de archivo.
El tamaño máximo de mensaje para utilizar con
DBMS_CLOUD_NOTIFICATION.SEND_DATApara la notificación por correo es de 32 kbytes.Consulte Procedimiento SEND_DATA para obtener más información.
-