Invia e-mail su Autonomous Database

Sono disponibili diverse opzioni per l'invio di e-mail su Autonomous Database. È inoltre possibile inviare messaggi di testo o l'output di una query SQL a un canale Slack o MSTeams.

Invia e-mail con servizio di consegna tramite e-mail su Autonomous Database

Descrive i passi per inviare messaggi di posta elettronica utilizzando UTL_SMTP in Autonomous Database.

Per inviare e-mail con Oracle Cloud Infrastructure Email Delivery Service:

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

    Se l'endpoint di connessione SMTP si trova in un'area diversa da quella di Autonomous Database, è necessario creare una richiesta al Supporto Oracle Cloud per fare in modo che le operazioni cloud abilitino il servizio di consegna tramite e-mail di quell'area per Autonomous Database.

    Per ulteriori informazioni, vedere Configura connessione SMTP.

  2. Genera le credenziali SMTP per il recapito e-mail. UTL_SMTP utilizza 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.

  3. Creare un mittente approvato per il servizio di consegna tramite e-mail. Completare questo passaggio per tutti gli indirizzi e-mail utilizzati come "From" con UTL_SMTP.MAIL.

    Per ulteriori informazioni, vedere Gestione dei mittenti approvati.

  4. 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;
    /
  5. Creare una procedura PL/SQL per inviare e-mail.

    Ad esempio, vedere il codice di esempio mostrato in SMTP Send Email Sample Code.

  6. 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 informazioni su UTL_SMTP, vedere UTL_SMTP.

Vedere PL/SQL Package Notes for Autonomous Database per le limitazioni UTL_SMTP con Autonomous Database.

Codice di esempio invio e-mail SMTP

Mostra il codice di esempio per l'invio di e-mail con UTL_SMTP su 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;
/

Posizione:

Invia e-mail con un provider di posta elettronica su un endpoint privato

Descrive i passi per inviare messaggi di posta elettronica a un provider di posta elettronica che si trova nell'endpoint privato.

Per inviare messaggi di posta elettronica da Autonomous Database utilizzando un provider di posta elettronica su un endpoint privato, il provider di posta elettronica deve essere accessibile dalla VCN di Oracle Cloud Infrastructure (endpoint privato dell'istanza di Autonomous Database). Ad esempio, è possibile accedere a un provider di posta elettronica quando:

  • Sia l'istanza di Autonomous Database di origine che il provider di posta elettronica si trovano nella stessa VCN di Oracle Cloud Infrastructure.

  • L'istanza di origine di Autonomous Database e il provider di posta elettronica si trovano in VCN Oracle Cloud Infrastructure diverse abbinate.

  • Il provider di posta elettronica si trova in una rete on premise connessa alla VCN Oracle Cloud Infrastructure dell'istanza di Autonomous Database di origine utilizzando FastConnect o VPN.

Come prerequisito, per inviare e-mail utilizzando un provider e-mail, definire le seguenti regole di entrata e uscita:

  • Definire una regola di uscita nella lista di sicurezza della subnet o nel gruppo di sicurezza di rete del database di origine in modo che il traffico verso l'host di destinazione sia consentito sulla porta 587 o sulla porta 25 (a seconda della porta in uso).

  • Definire una regola di entrata nella lista di sicurezza della subnet dell'host di destinazione o nel gruppo di sicurezza di rete in modo che sia consentito il traffico dall'indirizzo IP dell'istanza di Autonomous Database di origine alla porta 587 o alla porta 25 (a seconda della porta in uso).

Per inviare messaggi di posta elettronica da un provider di posta elettronica sull'endpoint privato:

  1. Consente l'accesso SMTP per l'utente ADMIN aggiungendo una voce di controllo dell'accesso (ACE).

    Ad esempio:

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

    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE supporta solo un singolo nome host per il parametro host (su un endpoint privato, l'utilizzo di un indirizzo IP, di un IP SCAN o di un nome host SCAN non è supportato).

    Se si imposta ROUTE_OUTBOUND_CONNECTIONS su PRIVATE_ENDPOINT, l'impostazione del parametro private_target su TRUE non è richiesta in questa API. Per ulteriori informazioni, vedere Sicurezza avanzata per le connessioni in uscita con endpoint privati.

  2. Creare una procedura PL/SQL per inviare e-mail.
  3. Inviare un messaggio di posta elettronica di test utilizzando la procedura PL/SQL creata nel passo 2.

    Ad esempio:

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

Usa oggetti credenziali per impostare l'autenticazione SMTP

Descrive come passare gli oggetti delle credenziali alle API UTL_SMTP.SET_CREDENTIAL.

Il sottoprogramma SET_CREDENTIAL invia il comando AUTH per l'autenticazione al server SMTP.

Il sottoprogramma UTL_SMTP.SET_CREDENTIAL consente di passare oggetti credenziali per impostare l'autenticazione SMTP. Gli oggetti delle credenziali sono oggetti dello schema, pertanto è possibile accedervi solo da utenti con privilegi e consentire di configurare privilegi a livello di schema per controllare le credenziali. Il passaggio di oggetti credenziali è un modo appropriato e sicuro per memorizzare e gestire nome utente/password/chiavi per l'autenticazione.

Il sottoprogramma UTL_SMTP.SET_CREDENTIAL è un'alternativa sicura e conveniente al sottoprogramma UTL_SMTP.AUTH.

Esempio


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

Come mostrato nell'esempio precedente, quando si richiama il sottoprogramma AUTH, è necessario passare il nome utente/password in chiaro come parte dei parametri formali PL/SQL. Potrebbe essere necessario incorporare il nome utente/password in vari script di automazione PL/SQL o cron. Il passaggio di password con testo in chiaro è un problema di conformità risolto nel sottoprogramma UTL_SMTP.SET_CREDENTIAL.

Per ulteriori informazioni, vedere Funzione e procedura AUTH.

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

Esempio

  • Creare un oggetto credenziale:

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

    In questo modo viene creato un oggetto credenziale che crea una coppia di nome utente/password memorizzata.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.

    Per ulteriori informazioni, vedere Specifica delle credenziali del job scheduler.

  • Eseguire la procedura 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;
    

    In questo esempio viene inviato il comando per l'autenticazione al server SMTP. Il server Web necessita di queste informazioni per autorizzare la richiesta. Il valore l_mail_conn è la connessione SMTP, SMTP_CRED è il nome delle credenziali e PLAIN è lo schema di autenticazione SMTP.

Per ulteriori informazioni, vedere UTL_SMTP.

Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_SMTP su Autonomous Database.

Invia e-mail da Autonomous Database utilizzando DBMS_CLOUD_NOTIFICATION

Utilizzare il package DBMS_CLOUD_NOTIFICATION per inviare messaggi ed eseguire query sui risultati come e-mail.

Invia messaggi come e-mail da Autonomous Database

È possibile utilizzare DBMS_CLOUD_NOTIFICATION per inviare messaggi come e-mail.
  1. 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.

  2. Genera le credenziali SMTP per il recapito e-mail. UTL_SMTP utilizza 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.

  3. Creare un mittente approvato per il servizio di consegna tramite e-mail. Completare questo passaggio per tutti gli indirizzi e-mail utilizzati come "From" con UTL_SMTP.MAIL.

    Per ulteriori informazioni, vedere Gestione dei mittenti approvati.

  4. 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;
    /
  5. Creare un oggetto credenziale e utilizzare DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE per 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 params per specificare il mittente, smtp_host, l'oggetto, il destinatario e i destinatari di un Ccn o Ccn nei valori string.

    • 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 dell'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 dell'e-mail. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari CC.

    • to_bcc: specifica gli ID e-mail che ricevono un Ccn del messaggio. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari Ccn.

    Per ulteriori informazioni, vedere SEND_MESSAGE Procedure.

Invia risultati query come e-mail da Autonomous Database

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

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

  2. Genera le credenziali SMTP per il recapito e-mail. UTL_SMTP utilizza 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.

  3. Creare un mittente approvato per il servizio di consegna tramite e-mail. Completare questo passaggio per tutti gli indirizzi e-mail utilizzati come "From" con UTL_SMTP.MAIL.

    Per ulteriori informazioni, vedere Gestione dei mittenti approvati.

  4. 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;
    /
  5. Creare un oggetto credenziale e utilizzare DBMS_CLOUD_NOTIFICATION.SEND_DATA per 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 params per 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 valori String.
    • 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 dell'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 dell'e-mail. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari CC.

    • to_bcc: specifica gli ID e-mail che ricevono un Ccn del messaggio. 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_DATA per la notifica di posta è di 32k byte.

    Per ulteriori informazioni, vedere SEND_DATA Procedure.