Enviar correo electrónico en base de datos de IA autónoma en una infraestructura de Exadata dedicada
Puede enviar correos electrónicos en la base de datos de IA autónoma en una infraestructura de Exadata dedicada mediante el servicio Email Delivery o los procedimientos DBMS_CLOUD_NOTIFICATION. Este artículo describe cómo enviar correo electrónico utilizando ambas opciones.
Enviar correo electrónico con el servicio Email Delivery en una base de datos de IA autónoma
Describe los pasos para enviar un correo electrónico mediante UTL_SMTP en Autonomous AI Database on Dedicated Exadata Infrastructure.
Para enviar un correo electrónico mediante UTL_SMTP:
-
Identifique el punto final de conexión SMTP para Email Delivery.
-
Si desea utilizar el servicio Email Delivery de Oracle Cloud Infrastructure (OCI), identifique el punto final de conexión para Email Delivery. Por ejemplo, seleccione
smtp.email.US-phoenix-1.oci.oraclecloud.comcuando Oeste de EE. UU. (Phoenix) sea la región de envío. Para obtener más información, consulte Configuración de la conexión SMTP.Nota: Puede que necesite suscribirse a regiones adicionales de Oracle Cloud Infrastructure si Email Delivery no está disponible en su región actual.
-
Si desea utilizar un servidor SMTP de terceros, el administrador del red debe configurar el servidor SMTP y su conectividad con el inquilino de la base de datos de IA autónoma y proporcionar la información del punto final del conexión SMTP.
-
-
Genere credenciales SMTP para Email Delivery para el usuario de OCI.
UTL_SMTPutiliza credenciales para autenticarse con los servidores de Email Delivery cuando envía un correo electrónico. Consulte Generación de credenciales SMTP para un usuario para obtener más información. -
Cree remitentes aprobados para Email Delivery.
Si utiliza el servicio Email Delivery de OCI, complete este paso para todas las direcciones a las que utilice como "De" con
UTL_SMTP.MAIL. Consulte Gestión de emisores aprobados para más información. -
Permita el acceso al host SMTP para los usuarios con rol de administrador agregando la entrada de control de acceso (ACE).
Para utilizar SMTP seguro, debe configurar el usuario de la base de datos con la entrada de control de acceso (ACE) para el acceso a la cartera, además del acceso al host SMTP. Para un acceso SMTP seguro con OCI Email Delivery Service, la cuenta de Oracle Cloud Infrastructure se debe autenticar mediante protocolos de autenticación simple y capa de seguridad (SASL), como PLAIN, CRAM-MD5, LOGIN. Por ejemplo, consulte el código del ejemplo en SMTP Send Email Sample Code.
-
Escriba el código PL/SQL para enviar correo electrónico mediante
UTL_MAIL.Consejo: Si desarrolla el procedimiento para enviar correo electrónico por su propia cuenta, asegúrese de que la información del código esté basada en Código de ejemplo de enviar correo electrónico SMTP.
-
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 Database', 'Sent using UTL_SMTP');
Consulte UTL_SMTP en Oracle Database 19c PL/SQL Packages and Types Reference o Oracle Database 26ai PL/SQL Packages and Types Reference para obtener más información.
Consulte Notes on the Use of Database PL/SQL Packages para ver más información sobre la utilización de UTL_SMTP con Autonomous AI Database.
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 una base de datos de IA autónoma.
Código de ejemplo
-- As ADMIN user, set up ACE to access SMTP host
connect admin/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
begin
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => '[SMTP_Server_address]',
lower_port => 25,
upper_port => 25,
ace => xs$ace_type(
privilege_list => xs$name_list('smtp'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- If using secure SMTP, set up ACE to wallet for certificate-based secure (TLS) email
declare
m_wallet_path VARCHAR2(512);
begin
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE (
wallet_path => m_wallet_path,
ace => xs$ace_type(
privilege_list => xs$name_list('use_client_certificates'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- As ADMIN or regular database user with privileges set up above, use UTL_SMTP to send email
connect [database_user]/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
-- Example of normal (non-secure) email
DECLARE
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := '[SMTP_Server_address]',
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
c := UTL_SMTP.OPEN_CONNECTION (host, port);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.CONNECTION: '
|| reply.CODE || ' - ' || reply.TEXT);
end if;
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c,'From:[Sender] <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'To:[Recipient] <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Mail Content');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
-- Example of secure email using OCI Mail Server as the SMTP server
DECLARE
m_wallet_path VARCHAR2(256);
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := 'smtp.email.[region].oci.oraclecloud.com';
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
-- secure connection with SSL/TLS made *before* SMTP communication
-- use hostname matched against CN or SMTP server's certificate
reply := UTL_SMTP.OPEN_CONNECTION (
host => host,
port => port,
c => c,
wallet_path => m_wallet_path,
wallet_password => NULL,
secure_connection_before_smtp => FALSE,
secure_host => NULL);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.OPEN_CONNECTION: '
|| reply.CODE ||' - ' || reply.TEXT);
end if;
UTL_SMTP.STARTTLS(c);
-- username is the 'SMTP credential' for the user's email address
-- obtained from OCI Identity -> Users -> email address.
-- Scheme refers to SASL (Simple Authentication and Security Layer)
-- Authentication Schemes for SMTP protocol - PLAIN, CRAM-MD5, LOGIN
-- https://docs.oracle.com/en-us/iaas/Content/Email/Concepts/overview.htm
UTL_SMTP.AUTH(
c => c,
username => '[ocid1.user.verylongaddresscreatedinOCIforuseraddress.com]',
password => '[password-provided-from-create]',
schemes => 'PLAIN');
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c, 'From: Sender <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'To: Recipient <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Mail Content');
UTL_SMTP.WRITE_DATA(c, 'Sender is a domain-owned approved sender in OCI Mail Service');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
Enviar mensajes como correo electrónico desde la base de datos de IA autónoma
SE APLICA A:
Solo Oracle Public Cloud
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 están recibiendo 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
SE APLICA A:
Solo Oracle Public Cloud
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 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_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 (Asunto): 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 están recibiendo 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.
-