E-Mail auf Autonomous Database on Dedicated Exadata Infrastructure senden

Sie können E-Mails auf Autonomous Database on Dedicated Exadata Infrastructure mit dem Email Delivery-Service oder den DBMS_CLOUD_NOTIFICATION-Prozeduren senden. In diesem Artikel wird beschrieben, wie Sie mit beiden Optionen E-Mails senden.

E-Mails mit Email Delivery-Service in Autonomous Database senden

Beschreibt die Schritte zum Senden von E-Mails mit UTL_SMTP in Autonomous Database on Dedicated Exadata Infrastructure.

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:

      Möglicherweise müssen Sie zusätzliche Oracle Cloud Infrastructure-Regionen abonnieren, wenn Email Delivery in Ihrer aktuellen Region nicht verfügbar ist.
    2. Wenn Sie den SMTP-Server eines Dritten verwenden möchten, muss der Netzwerkadministrator den SMTP-Server und seine Verbindung zum Autonomous Database-Mandanten 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 aus, die Sie als Absender verwenden. 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 das Senden von E-Mail mit SMTP.
  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 das Senden von E-Mail mit SMTP 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 und Typenreferenz oder Oracle Database 23ai PL/SQL-Packages und Typenreferenz.

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

Beispielcode für das Senden von E-Mail mit SMTP

Zeigt Beispielcode für das Senden von E-Mails mit UTL_SMTP in einer Autonomous Database.

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-Mails von Autonomous Database senden

Gilt nur für: Oracle Public Cloud (Anwendbar)

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. Möglicherweise müssen Sie zusätzliche Oracle Cloud Infrastructure-Regionen abonnieren, wenn Email Delivery in Ihrer aktuellen Region nicht verfügbar ist.

    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 eine E-Mail 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 mit UTL_SMTP.MAIL für alle E-Mail-Adressen aus, die Sie als "From" verwenden.

    Weitere Informationen finden Sie unter Genehmigte Absender verwalten.

  4. Lassen Sie den SMTP-Zugriff für ADMIN-Benutzer zu, indem Sie einen Access-Control-Eintrag (ACE) anhängen.

    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 senden Sie mit DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE eine Nachricht als 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;
    /

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

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

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

    • subject: 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 ein CC der E-Mail empfangen. 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 von Autonomous Database senden

Gilt nur für: Oracle Public Cloud (Anwendbar)

Mit dem Package DBMS_CLOUD_NOTIFICATION können Sie die Ergebnisse einer Abfrage als E-Mail senden.

So verwenden Sie DBMS_CLOUD_NOTIFICATION zum Senden von E-Mails:

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

    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 eine E-Mail 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 mit UTL_SMTP.MAIL für alle E-Mail-Adressen aus, die Sie als "From" verwenden.

    Weitere Informationen finden Sie unter Genehmigte Absender verwalten.

  4. Lassen Sie den SMTP-Zugriff für ADMIN-Benutzer zu, indem Sie einen Access-Control-Eintrag (ACE) anhängen.

    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 senden Sie die Ausgabe einer Abfrage mit DBMS_CLOUD_NOTIFICATION.SEND_DATA als 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;
    /
    Verwenden Sie den Parameter params, um den Absender, smtp_host, Betreff, Empfänger, Empfänger eines CC oder BCC, die Nachricht, den Datentyp und den Titel in String-Werten anzugeben.
    • sender: Gibt die E-Mail-ID des genehmigten Absenders aus Schritt 3 an.

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

    • subject: Gibt den Betreff der E-Mail 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 ein CC der E-Mail empfangen. 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.

    • message: 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 32k Byte.

    Weitere Informationen finden Sie unter Prozedur SEND_DATA.