Envoi de courriels sur Autonomous Database on Dedicated Exadata Infrastructure

Vous pouvez envoyer des courriels sur Autonomous 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.

Envoi de courriels avec le service Email Delivery sur Autonomous Database

Décrit les étapes à suivre pour envoyer des courriels à l'aide d'UTL_SMTP sur Autonomous Database on Dedicated Exadata Infrastructure.

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.

      Remarques :

      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 Autonomous Database 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 le service OCI Email Delivery, effectuez cette étape pour toutes les adresses électroniques que vous utilisez comme adresses d'expéditeur avec UTL_SMTP.MAIL. Pour plus d'informations, reportez-vous à Gestion des expéditeurs 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 disponible dans Exemple de code d'envoi de courriel SMTP.
  5. Ecrivez le code PL/SQL pour envoyer des courriels à l'aide de UTL_MAIL.

    Conseil :

    Si vous développez vous-même la procédure d'envoi de courriel, assurez-vous que votre code est conforme à l'exemple de code d'envoi de courriel SMTP.
  6. Envoyez un courriel de test à l'aide de 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 Référence des types et des packages PL/SQL Oracle Database 19c ou Référence des types et des packages PL/SQL Oracle Database 23ai.

Reportez-vous à Remarques sur l'utilisation des packages PL/SQL de base de données pour plus d'informations sur l'utilisation de UTL_SMTP avec Autonomous Database.

Exemple de code d'envoi de courriel SMTP

Affiche un exemple de code pour l'envoi de courriels avec UTL_SMTP sur une instance Autonomous Database.

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

Envoi de messages par courriel à partir d'Autonomous Database

S'APPLIQUE À : Applicable Oracle Public Cloud uniquement

Vous pouvez utiliser DBMS_CLOUD_NOTIFICATION pour envoyer des messages par 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 disponible 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 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 un expéditeur approuvé pour Email Delivery. Effectuez cette étape pour toutes les adresses électroniques que vous utilisez comme adresse d'expéditeur "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à Gestion des émetteurs approuvés.

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

    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 par 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, l'objet, le destinataire et les destinataires d'un CC ou d'un Cci dans les valeurs string.

    • expéditeur : indique l'ID courriel de l'expéditeur approuvé à l'étape 3.

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

    • subject : indique l'objet du courriel.

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

    • to_cc : indique les ID de courriel qui reçoivent une copie du courriel. Utilisez une virgule entre les ID courriel lorsqu'il existe plusieurs destinataires en copie.

    • to_bcc : indique les ID de courriel qui reçoivent un Cci du courriel. Utilisez une virgule entre les ID courriel lorsqu'il existe plusieurs destinataires en Cci.

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

Envoi des résultats de requête en tant que courriel à partir d'Autonomous Database

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 disponible 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 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 un expéditeur approuvé pour Email Delivery. Effectuez cette étape pour toutes les adresses électroniques que vous utilisez comme adresse d'expéditeur "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à Gestion des émetteurs approuvés.

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

    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 par 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, l'objet, le destinataire, les destinataires d'un CC ou d'un Cci, le message, le type de données et le titre dans les valeurs String.
    • expéditeur : indique l'ID courriel de l'expéditeur approuvé à l'étape 3.

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

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

    • récipiendaire : indique les ID de courriel des destinataires. Utilisez une virgule entre les ID courriel lorsqu'il existe plusieurs destinataires.

    • to_cc : indique les ID de courriel qui reçoivent une copie du courriel. Utilisez une virgule entre les ID courriel lorsqu'il existe plusieurs destinataires en copie.

    • to_bcc : indique les ID de courriel qui reçoivent un Cci du courriel. Utilisez une virgule entre les ID courriel 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 l'attachement de la sortie SQL. Le titre doit contenir uniquement des lettres, des chiffres, des traits de soulignement, des tirets ou des points en tant que caractères 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 e-mail est de 32k octets.

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