Envoyer un courriel sur une base de données d'IA autonome sur une infrastructure Exadata dédiée

Vous pouvez envoyer un courriel sur Autonomous AI Database on Dedicated Exadata Infrastructure à l'aide du service Email Delivery ou des procédures DBMS_CLOUD_NOTIFICATION. Cet article explique comment envoyer des courriels à l'aide de ces deux options.

Envoyer un courriel avec Email Delivery Service sur Autonomous AI Database

Décrit les étapes d'envoi de courriel à l'aide de UTL_SMTP sur une base de données Autonomous AI sur une infrastructure Exadata dédiée.

Pour envoyer des courriels à l'aide de UTL_SMTP, procédez comme suit :

  1. Identifiez votre adresse de connexion SMTP pour Email Delivery.

    1. Si vous voulez utiliser le service Oracle Cloud Infrastructure (OCI) Email Delivery, identifiez votre adresse de connexion pour Email Delivery. Par exemple, sélectionnez smtp.email.us-phoenix-1.oci.oraclecloud.com lorsqu'Ouest des Etats-Unis (Phoenix) est la région d'envoi. Pour plus d'informations, reportez-vous à Configuration de la connexion SMTP.

      Remarque : vous devrez peut- être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si Email Delivery n'est pas disponible dans votre région actuelle.

    2. Si vous voulez utiliser un serveur SMTP tiers, l'administrateur réseau doit configurer le serveur SMTP et sa connectivité avec le locataire de base de données Autonomous AI et fournir les informations d'adresse de connexion SMTP.

  2. Générez des informations d'identification SMTP pour Email Delivery pour l'utilisateur OCI.

    UTL_SMTP utilise les informations d'identification pour l'authentification auprès des serveurs Email Delivery lorsque vous envoyez un courriel. Pour plus d'informations, reportez-vous à Génération d'informations d'identification SMTP pour un utilisateur.

  3. Créez des expéditeurs approuvés pour Email Delivery.

    Si vous utilisez un service OCI Email Delivery, effectuez cette étape pour toutes les adresses électroniques à utiliser comme adresse d'expéditeur avec UTL_SMTP.MAIL. Pour plus d'informations, reportez-vous à la rubrique Gestion des expédititeurs approuvés.

  4. Autorisez l'accès à l'hôte SMTP pour les utilisateurs dotés du rôle d'administrateur en ajoutant l'entrée de contrôle d'accès.

    Pour employer le protocole SMTP sécurisé, vous devez configurer l'utilisateur de base de données avec l'entrée de contrôle d'accès pour l'accès au portefeuille, en plus de l'accès à l'hôte SMTP. Pour un accès SMTP sécurisé à l'aide du service OCI Email Delivery, le compte Oracle Cloud Infrastructure doit être authentifié au moyen de protocoles SASL tels que PLAIN, CRAM-MD5 et LOGIN. Reportez-vous notamment à l'exemple de code de Exemple de code d'envoi d'e-mail SMTP.

  5. Ecrivez le code PL/SQL pour envoyer des courriels à l'aide de UTL_MAIL.

    A savoir : Si vous développez vous-même la procédure d'envoi de message électronique, assurez- vous que votre code est conforme à l'exemple de code d'envoi de message SMTP.

  6. Envoyez un courriel de test en utilisant la procédure PL/SQL que vous avez créée à l'étape 5.

    Exemple :

     execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');
    

Pour plus d'informations, reportez-vous à UTL_SMTP dans Oracle Database 19c PL/SQL Packages and Types Reference ou Oracle Database 26ai PL/SQL Packages and Types Reference.

Pour plus d'informations sur l'utilisation de UTL_SMTP avec Autonomous AI Database, reportez-vous à Remarques sur l'utilisation des packages PL/SQL de base de donnée.

SMTP - Code exemple d'envoi d'e-mail

Affiche un exemple de code pour l'envoi de courriels avec UTL_SMTP sur une base de données Autonomous AI.

Exemple de code

-- 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;
/

Envoyer des messages par courriel à partir d'une base de données Autonomous AI

S'APPLIQUE À : Applicable Oracle Public Cloud uniquement

Vous pouvez utiliser DBMS_CLOUD_NOTIFICATION pour envoyer des messages sous forme de courriel.

  1. Identifiez votre adresse de connexion SMTP pour Email Delivery. Vous devrez peut- être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si Email Delivery n'est pas disponibles dans votre région actuelle.

    Par exemple, sélectionnez l'une des adresses de connexion SMTP suivantes :

    • smtp.us-phoenix-1.oraclecloud.com

    • smtp.us-ashburn-1.oraclecloud.com

    • smtp.email.uk-london-1.oci.oraclecloud.com

    • smtp.email.eu-frankfurt-1.oci.oraclecloud.com

    Pour plus d'informations, reportez-vous à Configuration de la connexion SMTP.

  2. Générez des informations d'identification SMTP pour Email Delivery. UTL_SMTP utilise les informations d'identification pour s'authentifier auprès des serveurs Email Delivery lorsque vous envoyez une adresse électronique.

    Pour plus d'informations, reportez-vous à Génération d'informations d'identification SMTP pour un utilisateur.

  3. Créez un expéditeur approuvé pour Email Delivery. Effectuez cette étape pour toutes les adresses électroniques utilisées en tant que "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à la rubrique Gestion des expédititeurs approuvés.

  4. Autorisez l'accès SMTP pour l'utilisateur ADMIN en ajoutant une entrée de contrôle d'accès (ACE).

    Exemple :

     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. Créez un objet d'informations d'identification et utilisez DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE pour envoyer un message sous forme de courriel.

     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;
     /
    

    Utilisez le paramètre params pour indiquer l'expéditeur, smtp_host, le sujet, le destinataire et les destinataires d'une carte de crédit ou d'une carte de crédit en Cci dans les valeurs string.

    • sender : spécifie l'ID courriel de l'expéditeur approuvé à partir de l'étape 3.

    • smtp_host : spécifie le nom d'hôte SMTP de l'étape 2.

    • subject : indique l'objet du courriel.

    • recipient : spécifie les ID de courriel des destinataires. Utilisez une virgule entre les ID de courriel lorsqu'il y a plusieurs destinataires.

    • to_cc : spécifie les ID d'e-mail qui reçoivent une copie de l'e-mail. Utilisez une virgule entre les ID d'e-mail lorsqu'il y a plusieurs destinataires CC.

    • to_bcc : spécifie les ID d'e-mail qui reçoivent un Cci de l'e-mail. Utilisez une virgule entre les ID e-mail lorsqu'il existe plusieurs destinataires en Cci.

    Pour plus d'informations, reportez-vous à Procédure SEND_MESSAGE.

Envoyer les résultats de requête sous forme de courriel à partir d'une base de données Autonomous AI

S'APPLIQUE À : Applicable Oracle Public Cloud uniquement

Vous pouvez utiliser le package DBMS_CLOUD_NOTIFICATION pour envoyer les résultats d'une requête par courriel.

Pour utiliser DBMS_CLOUD_NOTIFICATION pour envoyer du courrier :

  1. Identifiez votre adresse de connexion SMTP pour Email Delivery. Vous devrez peut- être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si Email Delivery n'est pas disponibles dans votre région actuelle.

    Par exemple, sélectionnez l'une des adresses de connexion SMTP suivantes :

    • smtp.us-phoenix-1.oraclecloud.com

    • smtp.us-ashburn-1.oraclecloud.com

    • smtp.email.uk-london-1.oci.oraclecloud.com

    • smtp.email.eu-frankfurt-1.oci.oraclecloud.com

    Pour plus d'informations, reportez-vous à Configuration de la connexion SMTP.

  2. Générez des informations d'identification SMTP pour Email Delivery. UTL_SMTP utilise les informations d'identification pour s'authentifier auprès des serveurs Email Delivery lorsque vous envoyez une adresse électronique.

    Pour plus d'informations, reportez-vous à Génération d'informations d'identification SMTP pour un utilisateur.

  3. Créez un expéditeur approuvé pour Email Delivery. Effectuez cette étape pour toutes les adresses électroniques utilisées en tant que "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à la rubrique Gestion des expédititeurs approuvés.

  4. Autorisez l'accès SMTP pour l'utilisateur ADMIN en ajoutant une entrée de contrôle d'accès (ACE).

    Exemple :

     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. Créez un objet d'informations d'identification et utilisez DBMS_CLOUD_NOTIFICATION.SEND_DATA pour envoyer la sortie d'une requête en tant que courriel.

     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;
     /
    

    Utilisez le paramètre params pour indiquer l'expéditeur, smtp_host, le sujet, le destinataire, les destinataires d'une copie en CC ou en Cci, le message, le type de données et le titre dans les valeurs String.

    • sender : spécifie l'ID courriel de l'expéditeur approuvé à partir de l'étape 3.

    • smtp_host : spécifie le nom d'hôte SMTP de l'étape 2.

    • subject : indique l'objet du courriel. La taille maximale est de 100 caractères.

    • recipient : indique les ID de courriel des destinataires. Utilisez une virgule entre les ID de courriel lorsqu'il y a plusieurs destinataires.

    • to_cc : spécifie les ID d'e-mail qui reçoivent une copie de l'e-mail. Utilisez une virgule entre les ID d'e-mail lorsqu'il y a plusieurs destinataires CC.

    • to_bcc : spécifie les ID d'e-mail qui reçoivent un Cci de l'e-mail. Utilisez une virgule entre les ID e-mail lorsqu'il existe plusieurs destinataires en Cci.

    • message : indique le texte du message.

    • type : indique le format de sortie au format CSV ou JSON.

    • title : indique le titre de la pièce jointe de la sortie SQL. Le titre ne doit contenir que des lettres, des chiffres, des traits de soulignement, des traits d'union ou des points en tant que caractères dans sa valeur car il est utilisé pour générer un nom de fichier.

    La taille maximale de message à utiliser avec DBMS_CLOUD_NOTIFICATION.SEND_DATA pour la notification par courriel est de 32 Ko.

    Pour plus d'informations, reportez-vous à Procédure SEND_DATA.

Contenu connexe

Remarques sur l'utilisation des packages PL/SQL de base de données