Envoyer un courriel sur une base de données d'intelligence artificielle autonome sur une infrastructure Exadata dédiée
Vous pouvez envoyer des courriels sur une base de données autonome avec intelligence artificielle 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 un courriel à l'aide de ces deux options.
Envoyer des courriels avec le service de transmission de messages sur une base de données autonome avec intelligence artificielle
Décrit les étapes d'envoi de courriel à l'aide de UTL_SMTP sur une base de données d'intelligence artificielle autonome sur une infrastructure Exadata dédiée.
Pour envoyer un courriel avec UTL_SMTP :
-
Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages.
-
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.comlorsque la région d'envoi est États-Unis - Ouest (Phoenix). Voir à partir de 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.
-
Si vous voulez utiliser un serveur SMTP de tierce partie, votre administrateur de réseau doit configurer le serveur SMTP et sa connectivité avec le locataire de base de données IA autonome et fournir les informations de point d'extrémité de connexion SMTP.
-
-
Générez les données d'identification SMTP pour le service de transmission de messages pour l'utilisateur OCI.
UTL_SMTPutilise 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. -
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 en tant qu'expéditeur avec
UTL_SMTP.MAIL. Pour plus d'informations, voir Gestion des expéditeurs approuvés. -
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. Par exemple, voir l'exemple de code dans Échantillon de code d'envoi de courriel SMTP.
-
É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 d'envoi de courriel SMTP.
-
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');
Pour plus d'informations, voir UTL_SMTP dans Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database 19c ou Informations de référence sur les ensembles et les types PL/SQL pour Oracle Database 26ai.
Pour plus d'informations sur l'utilisation de UTL_SMTP avec Autonomous AI Database, voir Notes sur l'utilisation des ensembles PL/SQL de base de données.
Code d'exemple de courriel d'envoi SMTP
Affiche un exemple de code pour l'envoi de courriels avec UTL_SMTP dans une base de données d'intelligence artificielle autonome.
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 autonome d'IA
S'APPLIQUE À :
Oracle Public Cloud seulement
Vous pouvez utiliser DBMS_CLOUD_NOTIFICATION pour envoyer des messages sous forme de courriel.
-
Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages. Vous devrez peut-être vous abonner à d'autres régions Oracle Cloud Infrastructure 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
Pour plus d'informations, voir Configurer la connexion SMTP.
-
-
Générez les données d'identification SMTP pour le service de transmission de messages.
UTL_SMTPutilise les données d'identification pour l'authentification auprès des serveurs de transmission de messages lorsque vous envoyez un courriel.Pour plus d'informations, voir Générer les données d'identification SMTP pour un utilisateur.
-
Créer un expéditeur approuvé pour le service de transmission de messages. Effectuez cette étape pour toutes les adresses de courriel que vous utilisez comme "
From" avecUTL_SMTP.MAIL.Pour plus d'informations, voir Gestion des expéditeurs approuvés.
-
Autoriser 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; / -
Créez un objet de données d'identification et utilisez
DBMS_CLOUD_NOTIFICATION.SEND_MESSAGEpour 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
paramspour spécifier l'expéditeur, smtp_host, le sujet, le destinataire et les destinataires d'une carte de crédit ou d'une carte Cci dans les valeursstring.-
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 (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 de carte de crédit.
-
to_bcc : indique 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.
Pour plus d'informations, voir Procédure SEND_MESSAGE.
-
Envoyer les résultats d'interrogation par courriel à partir d'une base de données autonome d'intelligence artificielle
S'APPLIQUE À :
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 du courrier :
-
Identifiez votre point d'extrémité de connexion SMTP pour le service de transmission de messages. Vous devrez peut-être vous abonner à d'autres régions Oracle Cloud Infrastructure 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
Pour plus d'informations, voir Configurer la connexion SMTP.
-
-
Générez les données d'identification SMTP pour le service de transmission de messages.
UTL_SMTPutilise les données d'identification pour l'authentification auprès des serveurs de transmission de messages lorsque vous envoyez un courriel.Pour plus d'informations, voir Générer les données d'identification SMTP pour un utilisateur.
-
Créer un expéditeur approuvé pour le service de transmission de messages. Effectuez cette étape pour toutes les adresses de courriel que vous utilisez comme "
From" avecUTL_SMTP.MAIL.Pour plus d'informations, voir Gestion des expéditeurs approuvés.
-
Autoriser 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; / -
Créez un objet de données d'identification et utilisez
DBMS_CLOUD_NOTIFICATION.SEND_DATApour 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
paramspour spécifier l'expéditeur, smtp_host, l'objet, le destinataire, les destinataires d'une carte de crédit ou d'une carte BCC, le message, le type de données et le titre dans les valeursString.-
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 (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 de carte de crédit.
-
to_bcc : indique 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 au format CSV ou JSON.
-
title : Indique le titre de l'attachement de la 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_DATApour les avis par courriel est de 32 octets.Pour plus d'informations, voir Procédure SEND_DATA.
-
Contenu connexe
Notes sur l'utilisation des ensembles PL/SQL de base de données