Envío de correo electrónico en Autonomous Database

Hay varias opciones para enviar correos electrónicos en Autonomous Database. También puede enviar mensajes de texto o la salida de una consulta SQL a un canal de Slack o MSTeams.

Envío de correo electrónico con el servicio Email Delivery en Autonomous Database

Describe los pasos para enviar mensajes de correo electrónico mediante UTL_SMTP en Autonomous Database.

Para enviar correos electrónicos con el servicio Oracle Cloud Infrastructure Email Delivery:

  1. 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

    Si el punto final de conexión SMTP está en una región diferente a la de Autonomous Database, debe crear una solicitud en Oracle Cloud Support para que Cloud Operations active el servicio Email Delivery de esa región para su instancia de Autonomous Database.

    Para obtener más información, consulte Configuración de la conexión SMTP.

  2. Genere credenciales SMTP para Email Delivery. UTL_SMTP utiliza 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.

  3. Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "From" con UTL_SMTP.MAIL.

    Consulte Gestión de emisores aprobados para más información.

  4. 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;
    /
  5. 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.

  6. 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 para obtener información sobre UTL_SMTP.

Consulte Notas del paquete PL/SQL para Autonomous Database para conocer las restricciones de UTL_SMTP con Autonomous Database.

Código de ejemplo de envío de correo electrónico SMTP

Muestra el código de ejemplo para enviar un correo electrónico con UTL_SMTP en Autonomous 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:

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 correos electrónicos desde Autonomous Database 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 Autonomous Database). Por ejemplo, puede acceder a un proveedor de correo electrónico cuando:

  • Tanto la instancia de Autonomous Database de origen como el proveedor de correo electrónico están en la misma VCN de Oracle Cloud Infrastructure.

  • La instancia de Autonomous Database 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 Autonomous Database 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 Autonomous Database 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:

  1. 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

    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE solo soporta un único nombre de host para el parámetro host (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 ROUTE_OUTBOUND_CONNECTIONS en PRIVATE_ENDPOINT, no es necesario definir el parámetro private_target en TRUE en esta API. Consulte Seguridad mejorada para conexiones salientes con puntos finales privados para obtener más información.

  2. Cree un procedimiento PL/SQL para enviar correo electrónico.
  3. 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 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. Puede que necesite embeber el nombre de usuario/contraseña en varios scripts cron o 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 CREATE_CREDENTIAL Procedure 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_conn es la conexión SMTP, SMTP_CRED es el nombre de las credenciales y PLAIN es el esquema de autenticación SMTP.

Consulte UTL_SMTP para obtener más información.

Consulte las Notas del paquete PL/SQL para Autonomous Database para obtener información sobre las restricciones de UTL_SMTP en Autonomous Database.

Enviar correo electrónico desde Autonomous Database 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 Autonomous Database

Puede utilizar DBMS_CLOUD_NOTIFICATION para enviar mensajes como correo electrónico.
  1. 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.

  2. Genere credenciales SMTP para Email Delivery. UTL_SMTP utiliza 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.

  3. Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "From" con UTL_SMTP.MAIL.

    Consulte Gestión de emisores aprobados para más información.

  4. 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;
    /
  5. Cree un objeto de credencial y utilice DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE para 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 params para especificar el remitente, smtp_host, el asunto, el destinatario y los destinatarios de un CC o BCC en valores string.

    • emisor: especifica el ID de correo electrónico del remitente aprobado del paso 3.

    • smtp_host: especifica el nombre de host SMTP del paso 2.

    • asunto: 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 reciben 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 SEND_MESSAGE Procedure para obtener más información.

Envío de resultados de consulta como correo electrónico desde Autonomous Database

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:

  1. 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.

  2. Genere credenciales SMTP para Email Delivery. UTL_SMTP utiliza 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.

  3. Cree un remitente aprobado para Email Delivery. Complete este paso para todas las direcciones que utilice como "From" con UTL_SMTP.MAIL.

    Consulte Gestión de emisores aprobados para más información.

  4. 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;
    /
  5. Cree un objeto de credencial y utilice DBMS_CLOUD_NOTIFICATION.SEND_DATA para 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 params para 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 valores String.
    • emisor: especifica el ID de correo electrónico del remitente aprobado del paso 3.

    • smtp_host: especifica el nombre de host SMTP del paso 2.

    • 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 reciben 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.

    • mensaje: especifica el texto del mensaje.

    • type: especifica el formato de salida como CSV o JSON.

    • título: 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_DATA para la notificación por correo es de 32k bytes.

    Consulte SEND_DATA Procedure para obtener más información.