Invia e-mail su Autonomous Database

Sono disponibili diverse opzioni per l'invio di messaggi di posta elettronica 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 servizio di consegna tramite e-mail. Potrebbe essere necessario effettuare la sottoscrizione a ulteriori aree geografiche di Oracle Cloud Infrastructure se il servizio di consegna tramite e-mail non è disponibile nella tua 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 Autonomous Database, è necessario creare una richiesta al Supporto Oracle Cloud per fare in modo che le operazioni cloud abilitino il servizio di consegna tramite posta elettronica di quell'area per l'Autonomous Database.

    Per ulteriori informazioni, vedere Configura connessione SMTP.

  2. Generare le credenziali SMTP per il servizio di consegna tramite e-mail. UTL_SMTP utilizza le credenziali per eseguire l'autenticazione con i server di consegna tramite e-mail quando si inviano e-mail.

    Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utente.

  3. Crea un mittente approvato per il servizio di consegna tramite e-mail. Completa questo passaggio per tutti gli indirizzi email che utilizzi 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 messaggi di posta elettronica.

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

Dove:

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

Descrive i passi per inviare e-mail a un provider di posta elettronica presente 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 Autonomous Database di origine e il provider di posta elettronica si trovano in diverse VCN di Oracle Cloud Infrastructure abbinate.

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

Come prerequisito, per inviare e-mail utilizzando un provider di posta elettronica, definire le regole di entrata e uscita riportate di seguito.

  • Definire una regola di uscita nella lista di sicurezza della subnet del database di origine o nel gruppo di sicurezza di rete 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 e-mail 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 (in un endpoint privato non è supportato l'utilizzo di un indirizzo IP, un IP SCAN o un nome host SCAN).

    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 Maggiore sicurezza per le connessioni in uscita con endpoint privati.

  2. Creare una procedura PL/SQL per inviare messaggi di posta elettronica.
  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 oggetti 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 gli oggetti delle credenziali per impostare l'autenticazione SMTP. Gli oggetti delle credenziali sono oggetti dello schema, pertanto possono essere accessibili solo dagli utenti con privilegi e consentono di configurare i privilegi a livello di schema per controllare le credenziali. Il passaggio degli oggetti delle 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 illustrato nell'esempio precedente, quando si richiama il sottoprogramma AUTH, è necessario passare il nome utente/password in testo in chiaro come parte dei parametri formali PL/SQL. Potrebbe essere necessario incorporare il nome utente/password in vari script di automazione o cron PL/SQL. Il passaggio di password in chiaro è un problema di conformità che viene 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

  • Crea un oggetto credenziali:

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

    Questo crea un oggetto credenziali che crea una coppia nome utente/password memorizzata.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

    Per ulteriori informazioni, vedere Specifica delle credenziali del job dello 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 richiede 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.

Vedere UTL_SMTP.

Per informazioni sulle limitazioni per UTL_SMTP su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.

Invia e-mail da Autonomous Database utilizzando DBMS_CLOUD_NOTIFICATION

Utilizzare il pacchetto 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 servizio di consegna tramite e-mail. Potrebbe essere necessario effettuare la sottoscrizione a ulteriori aree geografiche di Oracle Cloud Infrastructure se il servizio di consegna tramite e-mail non è disponibile nella tua 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. Generare le credenziali SMTP per il servizio di consegna tramite e-mail. UTL_SMTP utilizza le credenziali per eseguire l'autenticazione con i server di consegna tramite e-mail quando si inviano e-mail.

    Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utente.

  3. Crea un mittente approvato per il servizio di consegna tramite e-mail. Completa questo passaggio per tutti gli indirizzi email che utilizzi 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 credenziali 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 CC o BCC 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 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 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 dell'e-mail. Utilizzare una virgola tra gli ID e-mail quando sono presenti più destinatari Ccn.

    Per ulteriori informazioni, vedere SEND_MESSAGE Procedura.

Invia risultati query come e-mail da Autonomous Database

È possibile utilizzare il package DBMS_CLOUD_NOTIFICATION per inviare i risultati di una query come messaggio di posta elettronica.

Per utilizzare DBMS_CLOUD_NOTIFICATION per inviare posta:

  1. Identificare l'endpoint di connessione SMTP per il servizio di consegna tramite e-mail. Potrebbe essere necessario effettuare la sottoscrizione a ulteriori aree geografiche di Oracle Cloud Infrastructure se il servizio di consegna tramite e-mail non è disponibile nella tua 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. Generare le credenziali SMTP per il servizio di consegna tramite e-mail. UTL_SMTP utilizza le credenziali per eseguire l'autenticazione con i server di consegna tramite e-mail quando si inviano e-mail.

    Per ulteriori informazioni, vedere Generare le credenziali SMTP per un utente.

  3. Crea un mittente approvato per il servizio di consegna tramite e-mail. Completa questo passaggio per tutti gli indirizzi email che utilizzi 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 messaggio di posta elettronica.
    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 di un 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 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 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 dell'e-mail. 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 in formato 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 poiché viene utilizzato per generare un nome file.

    La dimensione massima dei messaggi da utilizzare con DBMS_CLOUD_NOTIFICATION.SEND_DATA per la notifica di posta è 32k byte.

    Per ulteriori informazioni, vedere SEND_DATA Procedura.