Envoi de courriels sur Autonomous Database

Il existe plusieurs options d'envoi de courriel sur Autonomous Database. Vous pouvez également envoyer des messages texte ou la sortie d'une requête SQL à un canal Slack ou MSTeams.

Envoi de courriels avec le service Email Delivery sur Autonomous Database

Décrit les étapes à suivre pour envoyer des courriels à l'aide de UTL_SMTP sur Autonomous Database.

Pour envoyer un courriel 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 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
    Remarque

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

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

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

    Par exemple, reportez-vous à l'exemple de code présenté dans la section SMTP Send Email Sample Code.

  6. Envoyez un courriel de test en utilisant 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');

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

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

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

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ù :

Envoyer un courriel avec un fournisseur de messagerie sur une adresse privée

Décrit les étapes à suivre pour envoyer un courriel à 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 lorsque :

  • L'instance Autonomous Database source et le fournisseur de messagerie sont tous deux 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 se trouve 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 du VPN.

Pour envoyer des courriels à l'aide d'un fournisseur de messagerie, vous devez au préalable définir les règles entrantes et sortantes 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 (selon le port que vous utilisez).

  • Définissez une règle entrante dans la liste de sécurité de sous-réseau ou le groupe de sécurité réseau de l'hôte cible de sorte que le trafic 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 un courriel à partir d'un fournisseur de messagerie 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 (ACE).

    Par 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 ne prend en charge qu'un seul nom d'hôte pour le paramètre host (sur une adresse privée, l'utilisation d'une adresse IP, d'une adresse SCAN ou d'un nom d'hôte SCAN n'est pas prise en charge).

    Si vous définissez ROUTE_OUTBOUND_CONNECTIONS sur PRIVATE_ENDPOINT, il n'est pas nécessaire de définir le paramètre private_target sur TRUE 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 pour envoyer des courriels.
  3. Envoyez un courriel de test en utilisant la procédure PL/SQL que vous avez créée à l'étape 2.

    Par 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. Par conséquent, seuls les utilisateurs privilégiés peuvent y accéder et vous permettent de configurer des privilèges de niveau schéma pour accéder au contrôle des 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/mot de passe/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 texte clair dans le cadre des paramètres formels PL/SQL. Vous devrez peut-être intégrer le nom utilisateur/mot de passe dans divers scripts cron ou d'automatisation PL/SQL. La transmission de mots de passe en texte clair est un problème de conformité traité dans le sous-programme UTL_SMTP.SET_CREDENTIAL.

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

    Cette opération 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 est la connexion SMTP, SMTP_CRED est le nom des informations d'identification et PLAIN est le modèle d'authentification SMTP.

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

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

Envoi d'e-mails à 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 par courriel à partir d'Autonomous Database

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

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

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

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

    • Objet : indique l'objet du courriel.

    • 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 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 : indique 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 la requête par 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 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).

    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 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, l'objet, 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.
    • Expéditeur : spécifie l'ID courriel de l'expéditeur approuvé à partir de 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 de courriel des destinataires. Utilisez une virgule entre les ID de courriel lorsqu'il y a plusieurs destinataires.

    • to_cc : indique 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 : indique 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.

    • 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 à Procédure SEND_DATA.