E-Mails an autonome KI-Datenbank auf dedizierter Exadata-Infrastruktur senden

Sie können E-Mails in der autonomen KI-Datenbank auf einer dedizierten Exadata-Infrastruktur mit dem Email Delivery-Service oder den DBMS_CLOUD_NOTIFICATION-Prozeduren senden. In diesem Artikel wird beschrieben, wie Sie E-Mails mit diesen beiden Optionen senden.

E-Mail mit Email Delivery-Service in autonomer KI-Datenbank senden

Beschreibt die Schritte zum Senden von E-Mails mit UTL_SMTP in der autonomen KI-Datenbank auf einer dedizierten Exadata-Infrastruktur.

So senden Sie E-Mails mit UTL_SMTP:

  1. Identifizieren Sie den SMTP-Verbindungsendpunkt für den E-Mail-Versand.

    1. Wenn Sie Oracle Cloud Infrastructure (OCI) Email Delivery Service verwenden möchten, identifizieren Sie den Verbindungsendpunkt für Email Delivery. Beispiel: Wählen Sie smtp.email.us-phoenix-1.oci.oraclecloud.com aus, wenn US West (Phoenix) die Absenderregion ist. Weitere Informationen finden Sie unter SMTP-Verbindung konfigurieren.

      Hinweis: Sie müssen möglicherweise zusätzliche Oracle Cloud Infrastructure-Regionen abonnieren, wenn Email Delivery in Ihrer aktuellen Region nicht verfügbar ist.

    2. Wenn Sie einen SMTP-Server eines Drittanbieters verwenden möchten, müssen der Netzwerkadministrator den SMTP-Server und seine Konnektivität mit dem Mandanten der autonomen AI-Datenbank konfigurieren und die Informationen zum SMTP-Verbindungsendpunkt angeben.

  2. Generieren Sie SMTP-Zugangsdaten für Email Delivery für den OCI-Benutzer.

    UTL_SMTP verwendet Zugangsdaten zur Authentifizierung bei Email Delivery-Servern, wenn Sie eine E-Mail senden. Weitere Informationen finden Sie unter SMTP-Zugangsdaten für einen Benutzer generieren.

  3. Erstellen Sie genehmigte Absender für den E-Mail-Versand.

    Wenn Sie OCI Email Delivery Service verwenden, führen sie diesen Schritt mit UTL_SMTP.MAIL für alle E-Mail-Adressen, die Sie als Absender verwenden, aus. Weitere Informationen finden Sie unter Genehmigte Absender verwalten.

  4. Ermöglichen Sie den SMTP-Hostzugriff für Benutzer mit Administratorrolle durch Anhängen eines Access Control-Eintrags (ACE).

    Um sicheres SMTP zu verwenden, müssen Sie den Datenbankbenutzer mit einem Access Control-Eintrag (ACE) für den Wallet-Zugriff zusätzlich zum SMTP-Hostzugriff einrichten. Für einen sicheren SMTP-Zugriff mit OCI Email Delivery Service muss der Oracle Cloud Infrastructure-Account mit Simple Authentication and Security Layer-(SASL-)Protokollen wie PLAIN, CRAM-MD5, LOGIN authentifiziert werden. Beispielcode finden Sie unter Beispielcode für SMTP-E-Mails senden.

  5. Schreiben Sie den PL/SQL-Code, um E-Mails mit UTL_MAIL zu senden.

    Tipp: Wenn Sie die E-Mail-Versandprozedur selbst entwickeln, stellen sie sicher, dass Ihr Code dem Beispielcode für SMTP-E-Mail-Versand entspricht.

  6. Senden Sie eine Test-E-Mail mit der PL/SQL-Prozedur, die Sie in Schritt 5 erstellt haben.

    Beispiel:

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

Weitere Informationen finden Sie unter UTL_SMTP in Oracle Database 19c PL/SQL-Packages and Types Reference oder Oracle Database 26ai PL/SQL Packages and Types Reference.

Weitere Informationen zur Verwendung von UTL_SMTP mit Autonomous AI Database finden Sie unter Hinweise zur Verwendung von Database-PL/SQL-Packages.

Beispielcode für SMTP-E-Mail senden

Zeigt Beispielcode für das Senden von E-Mails mit UTL_SMTP in einer autonomen KI-Datenbank an.

Beispielcode

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

Nachrichten als E-Mail aus autonomer KI-Datenbank senden

Gilt nur für: Anwendbar Oracle Public Cloud

Mit der DBMS_CLOUD_NOTIFICATION können Sie Nachrichten als E-Mail senden.

  1. Identifizieren Sie den SMTP-Verbindungsendpunkt für den E-Mail-Versand. Sie müssen möglicherweise zusätzliche Oracle Cloud Infrastructure-Regionen abonnieren, wenn Email Delivery in Ihrer aktuellen Region nicht zur Verfügung steht.

    Beispiel: Wählen Sie eine der folgenden Optionen für den SMTP-Verbindungsendpunkt aus:

    • 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

    Weitere Informationen finden Sie unter SMTP-Verbindung konfigurieren.

  2. Generieren Sie SMTP-Zugangsdaten für Email Delivery. UTL_SMTP verwendet Zugangsdaten zur Authentifizierung bei Email Delivery-Servern, wenn Sie E-Mails senden.

    Weitere Informationen finden Sie unter SMTP-Zugangsdaten für einen Benutzer generieren.

  3. Erstellen Sie einen genehmigten Absender für Email Delivery. Führen Sie diesen Schritt für alle E-Mail-Adressen durch, die Sie als "From" mit UTL_SMTP.MAIL verwenden.

    Weitere Informationen finden Sie unter Genehmigte Absender verwalten.

  4. SMTP-Zugriff für ADMIN-Benutzer durch Anhängen eines Access Control-Eintrags (ACE) zulassen.

    Beispiel:

     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. Erstellen Sie ein Zugangsdatenobjekt, und verwenden Sie DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE, um eine Nachricht als E-Mail zu senden.

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

    Verwenden Sie den Parameter params, um den Absender, smtp_host, Betreff, Empfänger und Empfänger eines CC oder BCC in string-Werten anzugeben.

    • Absender: Gibt die E-Mail-ID des genehmigten Absenders aus Schritt 3 an.

    • smtp_host: Gibt den SMTP-Hostnamen aus Schritt 2 an.

    • Betreff: Gibt den Betreff der E-Mail an.

    • Empfänger: Gibt die E-Mail-IDs der Empfänger an. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere Empfänger vorhanden sind.

    • to_cc: Gibt die E-Mail-IDs an, die einen CC der E-Mail erhalten. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere CC-Empfänger vorhanden sind.

    • to_bcc: Gibt die E-Mail-IDs an, die einen BCC der E-Mail erhalten. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere BCC-Empfänger vorhanden sind.

    Weitere Informationen finden Sie unter Prozedur SEND_MESSAGE.

Abfrageergebnisse als E-Mail aus autonomer KI-Datenbank senden

Gilt nur für: Anwendbar Oracle Public Cloud

Sie können das Package DBMS_CLOUD_NOTIFICATION verwenden, um die Ergebnisse einer Abfrage als E-Mail zu senden.

So verwenden Sie DBMS_CLOUD_NOTIFICATION zum Senden von E-Mails:

  1. Identifizieren Sie den SMTP-Verbindungsendpunkt für den E-Mail-Versand. Sie müssen möglicherweise zusätzliche Oracle Cloud Infrastructure-Regionen abonnieren, wenn Email Delivery in Ihrer aktuellen Region nicht zur Verfügung steht.

    Beispiel: Wählen Sie eine der folgenden Optionen für den SMTP-Verbindungsendpunkt aus:

    • 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

    Weitere Informationen finden Sie unter SMTP-Verbindung konfigurieren.

  2. Generieren Sie SMTP-Zugangsdaten für Email Delivery. UTL_SMTP verwendet Zugangsdaten zur Authentifizierung bei Email Delivery-Servern, wenn Sie E-Mails senden.

    Weitere Informationen finden Sie unter SMTP-Zugangsdaten für einen Benutzer generieren.

  3. Erstellen Sie einen genehmigten Absender für Email Delivery. Führen Sie diesen Schritt für alle E-Mail-Adressen durch, die Sie als "From" mit UTL_SMTP.MAIL verwenden.

    Weitere Informationen finden Sie unter Genehmigte Absender verwalten.

  4. SMTP-Zugriff für ADMIN-Benutzer durch Anhängen eines Access Control-Eintrags (ACE) zulassen.

    Beispiel:

     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. Erstellen Sie ein Zugangsdatenobjekt, und verwenden Sie DBMS_CLOUD_NOTIFICATION.SEND_DATA, um die Ausgabe einer Abfrage als E-Mail zu senden.

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

    Verwenden Sie den Parameter params, um Absender, smtp_host, Betreff, Empfänger, Empfänger eines CC oder BCC, die Nachricht, den Datentyp und den Titel in String-Werten anzugeben.

    • Absender: Gibt die E-Mail-ID des genehmigten Absenders aus Schritt 3 an.

    • smtp_host: Gibt den SMTP-Hostnamen aus Schritt 2 an.

    • Betreff: Gibt den Betreff der E-Mails an. Die maximale Größe beträgt 100 Zeichen.

    • Empfänger: Gibt die E-Mail-IDs der Empfänger an. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere Empfänger vorhanden sind.

    • to_cc: Gibt die E-Mail-IDs an, die einen CC der E-Mail erhalten. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere CC-Empfänger vorhanden sind.

    • to_bcc: Gibt die E-Mail-IDs an, die einen BCC der E-Mail erhalten. Verwenden Sie ein Komma zwischen E-Mail-IDs, wenn mehrere BCC-Empfänger vorhanden sind.

    • Nachricht: Gibt den Meldungstext an.

    • type: Gibt das Ausgabeformat als CSV- oder JSON-Datei an.

    • title: Gibt den Titel des Anhangs der SQL-Ausgabe an. Der Titel darf nur Buchstaben, Ziffern, Unterstriche, Bindestriche oder Punkte als Zeichen in seinem Wert enthalten, da er zur Generierung eines Dateinamens verwendet wird.

    Die maximale Nachrichtengröße für die Verwendung mit DBMS_CLOUD_NOTIFICATION.SEND_DATA für E-Mail-Benachrichtigungen beträgt 32 KB.

    Weitere Informationen finden Sie unter Prozedur SEND_DATA.

Verwandte Inhalte

Hinweise zur Verwendung von Datenbank-PL/SQL-Packages