Envoyer un courriel sur Autonomous Database sur une infrastructure Exadata dédiée

Vous pouvez envoyer des courriels sur Autonomous Database sur une infrastructure Exadata dédiée à l'aide du service de transmission de messages ou des procédures DBMS_CLOUD_NOTIFICATION. Cet article décrit comment envoyer des courriels à l'aide de ces deux options.

Envoyer des courriels à l'aide du service de transmission de messages dans une base de données autonome

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

Pour envoyer un courriel avec UTL_SMTP :
  1. Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages.
    1. Si vous voulez utiliser le service de transmission de messages pour Oracle Cloud Infrastructure (OCI), identifiez votre point d'extrémité de connexion pour ce service. Par exemple, sélectionnez smtp.email.us-phoenix-1.oci.oraclecloud.com lorsque la région d'envoi est États-Unis - Ouest (Phoenix). Voir Configurer une connexion SMTP pour plus d'informations.

      Note :

      Vous devrez peut-être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si le service de transmission de messages n'est pas disponible dans votre région courante.
    2. Si vous voulez utiliser un serveur SMTP de tierce partie, l'administrateur de réseau doit configurer le serveur SMTP et sa connectivité avec le locataire Autonomous Database et fournir les informations de point d'extrémité de connexion SMTP.
  2. Générez les données d'identification SMTP pour le service de transmission de messages pour l'utilisateur OCI.
    UTL_SMTP utilise des données d'identification pour l'authentification sur les serveurs de transmission de messages lors de l'envoi d'un courriel. Pour plus d'informations, voir Générer les données d'identification SMTP pour un utilisateur.
  3. Créez des expéditeurs approuvés pour le service de transmission de messages.
    Si vous utilisez le service de transmission de messages pour OCI, effectuez cette étape pour toutes les adresses de courriel que vous utilisez comme expéditeurs avec UTL_SMTP.MAIL. Pour plus d'informations, voir 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 une entrée de contrôle d'accès.
    Pour utiliser le protocole SMTP sécurisé, vous devez configurer l'utilisateur de base de données avec une 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é au moyen du service de transmission de messages pour OCI, le compte Oracle Cloud Infrastructure doit être authentifié à l'aide de protocoles SASL (Simple Authentication and Security Layer) tels que PLAIN, CRAM-MD5 et LOGIN. Voir, par exemple, l'exemple de code pour l'envoi de courriel SMTP.
  5. Écrivez le code PL/SQL pour l'envoi de courriel avec 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 pour l'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.
    Par exemple :
    execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');

Exemple de code pour l'envoi de courriel SMTP

Affiche un exemple de code pour l'envoi de courriels avec UTL_SMTP sur une base de données 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;
/

Envoyer des messages par courriel à partir d'Autonomous Database

S'applique à : Applicable Oracle Public Cloud seulement

Vous pouvez utiliser DBMS_CLOUD_NOTIFICATION pour envoyer des messages sous forme de courriel.
  1. Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages. Vous devrez peut-être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si le service de transmission de messages n'est pas disponible dans votre région courante.

    Par exemple, sélectionnez l'une des valeurs suivantes pour le point d'extrémité de connexion SMTP :

    • 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

    Voir Configurer une connexion SMTP pour plus d'informations.

  2. Générez les données d'identification SMTP pour le service de transmission de messages. UTL_SMTP utilise des données d'identification pour l'authentification sur les serveurs de transmission de messages lors de l'envoi de courriel.
  3. Créez un expéditeur approuvé pour le service de transmission de messages. Effectuez cette étape pour toutes les adresses de courriel que vous utilisez en tant qu'expéditeur ("From") avec UTL_SMTP.MAIL.

    Pour plus d'informations, voir 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.

    Par 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 de données d'identification et utilisez DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE pour envoyer un message comme 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 spécifier l'expéditeur, smtp_host, l'objet, le destinataire et les destinataires d'une carte de crédit ou d'une carte de crédit en 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.

    • Objet : indique l'objet du courriel.

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

    • to_cc : Indique les ID courriel qui reçoivent une copie conforme du courriel. Utilisez une virgule entre les ID courriel lorsqu'il y a plusieurs destinataires en CC.

    • to_bcc : Spécifie les ID courriel qui reçoivent un Cci du courriel. Utilisez une virgule entre les ID courriel lorsqu'il y a plusieurs destinataires en Cci.

    Voir Procédure SEND_MESSAGE pour plus d'informations.

Envoyer les résultats de l'interrogation par courriel à partir d'Autonomous Database

S'applique à : Applicable Oracle Public Cloud seulement

Vous pouvez utiliser l'ensemble DBMS_CLOUD_NOTIFICATION pour envoyer les résultats d'une interrogation par courriel.

Pour utiliser DBMS_CLOUD_NOTIFICATION pour envoyer un courriel :

  1. Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages. Vous devrez peut-être vous abonner à des régions Oracle Cloud Infrastructure supplémentaires si le service de transmission de messages n'est pas disponible dans votre région courante.

    Par exemple, sélectionnez l'une des valeurs suivantes pour le point d'extrémité de connexion SMTP :

    • 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

    Voir Configurer une connexion SMTP pour plus d'informations.

  2. Générez les données d'identification SMTP pour le service de transmission de messages. UTL_SMTP utilise des données d'identification pour l'authentification sur les serveurs de transmission de messages lors de l'envoi de courriel.
  3. Créez un expéditeur approuvé pour le service de transmission de messages. Effectuez cette étape pour toutes les adresses de courriel que vous utilisez en tant qu'expéditeur ("From") avec UTL_SMTP.MAIL.

    Pour plus d'informations, voir 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.

    Par 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 de données d'identification et utilisez DBMS_CLOUD_NOTIFICATION.SEND_DATA pour envoyer la sortie d'une interrogation sous forme de 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 spécifier l'expéditeur, smtp_host, l'objet, le destinataire, les destinataires d'une carte de crédit ou d'une carte de crédit, 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.

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

    • Destinataire : Indique les ID courriel des destinataires. Utilisez une virgule entre les ID courriel lorsqu'il y a plusieurs destinataires.

    • to_cc : Indique les ID courriel qui reçoivent une copie conforme du courriel. Utilisez une virgule entre les ID courriel lorsqu'il y a plusieurs destinataires en CC.

    • to_bcc : Spécifie les ID courriel qui reçoivent un Cci du courriel. Utilisez une virgule entre les ID courriel lorsqu'il y a plusieurs destinataires en Cci.

    • message : indique le texte du message.

    • type : Spécifie le format de sortie CSV ou JSON.

    • titre : indique le titre du fichier joint de sortie SQL. Le titre ne doit contenir que des lettres, des chiffres, des traits de soulignement, des tirets 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 des messages à utiliser avec DBMS_CLOUD_NOTIFICATION.SEND_DATA pour les avis par courriel est de 32k octets.

    Voir Procédure SEND_DATA pour plus d'informations.