Invia e-mail su Autonomous AI Database su un'infrastruttura Exadata dedicata
Puoi inviare un messaggio di posta elettronica su Autonomous AI Database on Dedicated Exadata Infrastructure utilizzando il servizio di consegna tramite e-mail o le procedure DBMS_CLOUD_NOTIFICATION. Questo articolo descrive come inviare e-mail utilizzando entrambe queste opzioni.
Invia e-mail con servizio di consegna tramite e-mail su Autonomous AI Database
Descrive i passi per inviare messaggi di posta elettronica utilizzando UTL_SMTP su Autonomous AI Database on Dedicated Exadata Infrastructure.
Per inviare e-mail utilizzando UTL_SMTP:
-
Identificare l'endpoint di connessione SMTP per il recapito e-mail.
-
Se si desidera utilizzare Oracle Cloud Infrastructure (OCI) Email Delivery Service, identificare l'endpoint di connessione per Email Delivery. Ad esempio, selezionare
smtp.email.us-phoenix-1.oci.oraclecloud.comse US West (Phoenix) è l'area di invio. Per ulteriori informazioni, vedere Configura connessione SMTP.Nota: potrebbe essere necessario eseguire la sottoscrizione ad altre aree di Oracle Cloud Infrastructure se il servizio di consegna tramite e-mail non è disponibile nell'area corrente.
-
Se si desidera utilizzare un server SMTP di terze parti, l'amministratore di rete deve configurare il server SMTP e la relativa connettività con il tenant di Autonomous AI Database e fornire le informazioni sull'endpoint di connessione SMTP.
-
-
Generare le credenziali SMTP per Email Delivery per l'utente OCI.
UTL_SMTPutilizza le credenziali per eseguire l'autenticazione con i server Email Delivery quando si invia un'e-mail. Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utenti. -
Crea mittenti approvati per consegna tramite e-mail.
Se si utilizza il servizio OCI Email Delivery, completare questo passo per tutti gli indirizzi di posta elettronica utilizzati come "Da" con
UTL_SMTP.MAIL. Per ulteriori informazioni, vedere Gestione dei mittenti approvati. -
Consente l'accesso host SMTP per gli utenti con ruolo di amministratore aggiungendo la voce di controllo dell'accesso (ACE).
Per utilizzare SMTP sicuro, è necessario impostare l'utente del database con la voce ACE (Access Control Entry) per l'accesso al wallet, oltre all'accesso host SMTP. Per un accesso SMTP sicuro che utilizza OCI Email Delivery Service, l'account Oracle Cloud Infrastructure deve essere autenticato utilizzando i protocolli Simple Authentication and Security Layer (SASL), come PLAIN, CRAM-MD5, LOGIN. Ad esempio, vedere il codice di esempio in Codice di esempio Invia e-mail SMTP.
-
Scrivere il codice PL/SQL per inviare e-mail utilizzando
UTL_MAIL.Suggerimento: se si sta sviluppando la procedura di invio e-mail autonomamente, assicurarsi che il codice sia conforme a Codice campione invio e-mail SMTP.
-
Inviare un messaggio di posta elettronica di test utilizzando la procedura PL/SQL creata nel passo 5.
Ad esempio:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');
Per ulteriori informazioni, vedere UTL_SMTP in Oracle Database 19c PL/SQL Packages and Types Reference oppure Oracle Database 26ai PL/SQL Packages and Types Reference.
Per ulteriori informazioni sull'uso di UTL_SMTP con Autonomous AI Database, consulta le note sull'uso dei package Database PL/SQL.
Codice di esempio invio e-mail SMTP
Mostra il codice di esempio per l'invio di e-mail con UTL_SMTP in un Autonomous AI Database.
Codice di esempio
-- 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;
/
Invia messaggi come e-mail da Autonomous AI Database
SI APPLICA A:
Solo Oracle Public Cloud
È possibile utilizzare DBMS_CLOUD_NOTIFICATION per inviare messaggi come e-mail.
-
Identificare l'endpoint di connessione SMTP per il recapito e-mail. Potrebbe essere necessario effettuare la sottoscrizione ad altre aree di Oracle Cloud Infrastructure se Email Delivery non è disponibile nell'area corrente.
Ad esempio, selezionare una delle seguenti opzioni per l'endpoint di connessione 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
Per ulteriori informazioni, vedere Configura connessione SMTP.
-
-
Genera le credenziali SMTP per il recapito e-mail.
UTL_SMTPutilizza le credenziali per eseguire l'autenticazione con i server di consegna tramite e-mail quando si invia l'e-mail.Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utenti.
-
Creare un mittente approvato per il servizio di consegna tramite e-mail. Completare questo passaggio per tutti gli indirizzi e-mail utilizzati come "
From" conUTL_SMTP.MAIL.Per ulteriori informazioni, vedere Gestione dei mittenti approvati.
-
Consente l'accesso SMTP per l'utente ADMIN aggiungendo una voce di controllo dell'accesso (ACE).
Ad esempio:
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; / -
Creare un oggetto credenziale e utilizzare
DBMS_CLOUD_NOTIFICATION.SEND_MESSAGEper inviare un messaggio come e-mail.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; /Utilizzare il parametro
paramsper specificare il mittente, smtp_host, l'oggetto, il destinatario e i destinatari di un codice CC o Ccn nei valoristring.-
mittente: specifica l'ID e-mail del mittente approvato dal passo 3.
-
smtp_host: specifica il nome host SMTP dal passo 2.
-
oggetto: specifica l'oggetto del messaggio e-mail.
-
destinatario: specifica gli ID e-mail dei destinatari. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari.
-
to_cc: specifica gli ID e-mail che ricevono un CC del messaggio. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari CC.
-
to_bcc: specifica gli ID di posta elettronica che ricevono un Ccn del messaggio di posta elettronica. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari Ccn.
Per ulteriori informazioni, vedere Procedura SEND_MESSAGE.
-
Invia risultati query come e-mail da Autonomous AI Database
SI APPLICA A:
Solo Oracle Public Cloud
È possibile utilizzare il pacchetto DBMS_CLOUD_NOTIFICATION per inviare i risultati di una query come e-mail.
Per utilizzare DBMS_CLOUD_NOTIFICATION per inviare posta:
-
Identificare l'endpoint di connessione SMTP per il recapito e-mail. Potrebbe essere necessario effettuare la sottoscrizione ad altre aree di Oracle Cloud Infrastructure se Email Delivery non è disponibile nell'area corrente.
Ad esempio, selezionare una delle seguenti opzioni per l'endpoint di connessione 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
Per ulteriori informazioni, vedere Configura connessione SMTP.
-
-
Genera le credenziali SMTP per il recapito e-mail.
UTL_SMTPutilizza le credenziali per eseguire l'autenticazione con i server di consegna tramite e-mail quando si invia l'e-mail.Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utenti.
-
Creare un mittente approvato per il servizio di consegna tramite e-mail. Completare questo passaggio per tutti gli indirizzi e-mail utilizzati come "
From" conUTL_SMTP.MAIL.Per ulteriori informazioni, vedere Gestione dei mittenti approvati.
-
Consente l'accesso SMTP per l'utente ADMIN aggiungendo una voce di controllo dell'accesso (ACE).
Ad esempio:
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; / -
Creare un oggetto credenziale e utilizzare
DBMS_CLOUD_NOTIFICATION.SEND_DATAper inviare l'output di una query come e-mail.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; /Utilizzare il parametro
paramsper specificare il mittente, smtp_host, l'oggetto, il destinatario, i destinatari di un CC o Ccn, il messaggio, il tipo di dati e il titolo nei valoriString.-
mittente: specifica l'ID e-mail del mittente approvato dal passo 3.
-
smtp_host: specifica il nome host SMTP dal passo 2.
-
oggetto: specifica l'oggetto del messaggio e-mail. La dimensione massima è di 100 caratteri.
-
destinatario: specifica gli ID e-mail dei destinatari. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari.
-
to_cc: specifica gli ID e-mail che ricevono un CC del messaggio. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari CC.
-
to_bcc: specifica gli ID di posta elettronica che ricevono un Ccn del messaggio di posta elettronica. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari Ccn.
-
messaggio: specifica il testo del messaggio.
-
tipo: specifica il formato di output come CSV o JSON.
-
titolo: specifica il titolo dell'allegato dell'output SQL. Il titolo deve contenere solo lettere, cifre, caratteri di sottolineatura, trattini o punti come caratteri nel relativo valore in quanto viene utilizzato per generare un nome file.
La dimensione massima del messaggio da utilizzare con
DBMS_CLOUD_NOTIFICATION.SEND_DATAper la notifica di posta è di 32k byte.Per ulteriori informazioni, vedere Procedura SEND_DATA.
-