Envoi de courriels sur Autonomous Database

Plusieurs options sont disponibles pour l'envoi de courriels sur Autonomous Database. Vous pouvez également envoyer des messages texte ou la sortie d'une requête SQL à un canal Slack ou MSTeams.

Envoyer des 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.

Pour envoyer des courriels avec le service Oracle Cloud Infrastructure Email Delivery, procédez comme suit :

  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
    Remarque

    Si l'adresse de connexion SMTP se trouve dans une région différente de votre instance Autonomous Database, vous devez créer une demande auprès du support technique Oracle Cloud pour que les opérations cloud activent le service Email Delivery de cette région pour votre instance Autonomous Database.

    Pour plus d'informations sur la 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.

    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 "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à Managing Approved Senders.

  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 une procédure PL/SQL permettant d'envoyer des courriels.

    Reportez-vous notamment à l'exemple de code disponible dans 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');

Reportez-vous à UTL_SMTP pour plus d'informations sur UTL_SMTP.

Reportez-vous à Notes sur le package PL/SQL pour Autonomous Database pour connaître les restrictions relatives à UTL_SMTP avec Autonomous Database.

Exemple d'envoi de courriel SMTP

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

Où :

Envoi de courriels avec un fournisseur de messagerie sur une adresse privée

Décrit les étapes d'envoi de courriels avec un fournisseur de messagerie situé sur une adresse privée.

Pour envoyer des courriels à partir d'Autonomous Database à l'aide d'un fournisseur de messagerie sur une adresse privée, le fournisseur de messagerie doit être accessible à partir du VCN Oracle Cloud Infrastructure (adresse privée de l'instance Autonomous Database). Par exemple, vous pouvez accéder à un fournisseur de messagerie dans les cas suivants :

  • L'instance Autonomous Database source et le fournisseur de messagerie se trouvent dans le même VCN Oracle Cloud Infrastructure.

  • L'instance Autonomous Database source et le fournisseur de messagerie se trouvent dans différents réseaux cloud virtuels Oracle Cloud Infrastructure couplés.

  • Le fournisseur de messagerie est sur un réseau sur site connecté au réseau VCN Oracle Cloud Infrastructure de l'instance Autonomous Database source à l'aide de FastConnect ou d'un VPN.

Pour envoyer des courriels à l'aide d'un fournisseur de messagerie, vous devez d'abord définir les règles d'entrée et de sortie suivantes :

  • Définissez une règle sortante dans la liste de sécurité de sous-réseau ou le groupe de sécurité réseau de la base de données source de sorte que le trafic vers l'hôte cible soit autorisé sur le port 587 ou le port 25 (en fonction du port que vous utilisez).

  • Définissez une règle entrante dans la liste de sécurité réseau ou le groupe de sécurité réseau de l'hôte cible de sorte que le trafic provenant de l'adresse IP de l'instance Autonomous Database source vers le port 587 ou le port 25 soit autorisé (en fonction du port que vous utilisez).

Pour envoyer des courriels à partir d'un fournisseur de messagerie situé sur une adresse privée, procédez comme suit :

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

    Exemple :

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

    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE prend uniquement en charge un nom d'hôte unique pour le paramètre host (sur une adresse privée, à l'aide d'une adresse IP, d'une adresse IP SCAN ou d'un nom d'hôte SCAN non pris en charge).

    Si vous définissez ROUTE_OUTBOUND_CONNECTIONS sur PRIVATE_ENDPOINT, la définition du paramètre private_target sur TRUE n'est pas requise dans cette API. Pour plus d'informations, reportez-vous à Sécurité améliorée pour les connexions sortantes avec des adresses privées.

  2. Créez une procédure PL/SQL permettant d'envoyer des courriels.
  3. Envoyez un courriel de test à l'aide de la procédure PL/SQL que vous avez créée à l'étape 2.

    Exemple :

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

Utiliser des objets d'informations d'identification pour définir l'authentification SMTP

Explique comment transmettre des objets d'informations d'identification aux API UTL_SMTP.SET_CREDENTIAL.

Le sous-programme SET_CREDENTIAL envoie la commande AUTH pour s'authentifier auprès du serveur SMTP.

Le sous-programme UTL_SMTP.SET_CREDENTIAL vous permet de transmettre des objets d'informations d'identification pour définir l'authentification SMTP. Les objets d'informations d'identification sont des objets de schéma. Ils ne sont donc accessibles qu'aux utilisateurs dotés de privilèges et vous permettent de configurer des privilèges de niveau schéma pour contrôler les informations d'identification. La transmission d'objets d'informations d'identification est un moyen approprié et sécurisé de stocker et de gérer le nom utilisateur, le mot de passe et les clés pour l'authentification.

Le sous-programme UTL_SMTP.SET_CREDENTIAL est une alternative sécurisée et pratique au sous-programme UTL_SMTP.AUTH.

Exemple


...
UTL_SMTP.AUTH (l_mail_conn, 'ocid1.user.oc1.username', 'xxxxxxxxxxxx', schemes => 'PLAIN');
...

Comme indiqué dans l'exemple ci-dessus, lorsque vous appelez le sous-programme AUTH, vous devez transmettre le nom utilisateur/mot de passe en clair dans le cadre des paramètres formels PL/SQL. Vous devrez peut-être intégrer le nom utilisateur/mot de passe dans différents scripts cron ou d'automatisation PL/SQL. La transmission de mots de passe en clair est un problème de conformité résolu dans le sous-programme UTL_SMTP.SET_CREDENTIAL.

Pour plus d'informations, reportez-vous à Fonction et procédure AUTH.

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

Exemple

  • Créez un objet d'informations d'identification :

    BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'HTTP_CRED',
        username        => 'web_app_user',
        password        => '<password>' );
    END;

    Cela crée un objet d'informations d'identification qui crée une paire nom utilisateur/mot de passe stockée.

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

    Pour plus d'informations, reportez-vous à Spécification des informations d'identification de travail du planificateur.

  • Exécutez la procédure 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;
    

    Cet exemple envoie la commande d'authentification au serveur SMTP. Le serveur Web a besoin de ces informations pour autoriser la demande. La valeur l_mail_conn correspond à la connexion SMTP, SMTP_CRED au nom des informations d'identification et PLAIN au modèle d'authentification SMTP.

Pour plus d'informations, reportez-vous à UTL_SMTP.

Pour plus d'informations sur les restrictions relatives à UTL_SMTP sur Autonomous Database, reportez-vous à Notes de package PL/SQL pour Autonomous Database.

Envoi de courriels à partir d'Autonomous Database à l'aide de DBMS_CLOUD_NOTIFICATION

Utilisez le package DBMS_CLOUD_NOTIFICATION pour envoyer des messages et interroger les résultats par courriel.

Envoi de messages en tant que courriels à partir d'Autonomous Database

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 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 sur la 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.

    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 "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à Managing Approved Senders.

  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'une copie ou d'une copie en Cci dans les valeurs string.

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

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

    • Objet : spécifie l'objet du courriel.

    • bénéficiaire : spécifie les ID d'e-mail des destinataires. Utilisez une virgule entre les ID de courriel lorsqu'il y a plusieurs destinataires.

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

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

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

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

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 des courriels, procédez comme suit :

  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 sur la 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.

    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 "From" avec UTL_SMTP.MAIL.

    Pour plus d'informations, reportez-vous à Managing Approved Senders.

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

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

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

    • destinataire : spécifie les ID d'e-mail des destinataires. Utilisez une virgule entre les ID de courriel lorsqu'il y a plusieurs destinataires.

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

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

    • message : indique le texte du message.

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

    • titre : 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 32k octets.

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