E-Mails in Autonomous Database senden

Es gibt eine Reihe von Optionen zum Senden von E-Mails in Autonomous Database. Sie können auch Textnachrichten oder die Ausgabe einer SQL-Abfrage an einen Slack- oder MSTeams-Kanal 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.

So senden Sie E-Mails mit Oracle Cloud Infrastructure Email Delivery Service:

  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
    Hinweis

    Wenn sich der SMTP-Verbindungsendpunkt in einer anderen Region als Ihre Autonomous Database befindet, müssen Sie unter Oracle Cloud Support eine Anforderung erstellen, damit Cloud Operations den Email Delivery-Service dieser Region für Ihre Autonomous Database aktivieren.

    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 eine PL/SQL-Prozedur, um E-Mails zu senden.

    Beispiel: Siehe Beispielcode unter SMTP Send Email Sample Code.

  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');

Informationen zu UTL_SMTP finden Sie unter UTL_SMTP.

Siehe PL/SQL-Packagehinweise für Autonomous Database für UTL_SMTP-Einschränkungen bei Autonomous Database.

Beispielcode für SMTP-E-Mail senden

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

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

Dabei gilt:

E-Mail mit einem E-Mail-Provider an einem privaten Endpunkt senden

Beschreibt die Schritte zum Senden von E-Mails an einen E-Mail-Provider, der sich auf einem privaten Endpunkt befindet.

Um E-Mails von Autonomous Database mit einem E-Mail-Provider an einem privaten Endpunkt zu senden, muss der E-Mail-Provider über das Oracle Cloud Infrastructure-VCN (den privaten Endpunkt der Autonomous Database-Instanz) zugänglich sein. Beispiel: Sie können auf einen E-Mail-Provider zugreifen, wenn:

  • Sowohl die Autonomous Database-Quellinstanz als auch der E-Mail-Provider befinden sich in demselben Oracle Cloud Infrastructure-VCN.

  • Die Autonomous Database-Quellinstanz und der E-Mail-Provider befinden sich in verschiedenen Oracle Cloud Infrastructure-VCNs, die gepaart sind.

  • Der E-Mail-Provider befindet sich in einem On-Premise-Netzwerk, das mit dem Oracle Cloud Infrastructure-VCN der Autonomous Database-Quellinstanz über FastConnect oder VPN verbunden ist.

Um E-Mails mit einem E-Mail-Provider zu senden, müssen Sie die folgenden Ingress- und Egress-Regeln definieren:

  • Definieren Sie eine Egress-Regel in der Subnetzsicherheitsliste der Quelldatenbank oder in der Netzwerksicherheitsgruppe, sodass der Traffic zum Zielhost auf Port 587 oder Port 25 zulässig ist (je nachdem, welchen Port Sie verwenden).

  • Definieren Sie eine Ingress-Regel in der Subnetzsicherheitsliste oder Netzwerksicherheitsgruppe des Zielhosts, sodass der Traffic von der IP-Adresse der Autonomous Database-Quellinstanz zu Port 587 oder Port 25 zulässig ist (je nachdem, welchen Port Sie verwenden).

So senden Sie E-Mails von einem E-Mail-Provider am privaten Endpunkt:

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

    Beispiel:

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

    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE unterstützt nur einen einzelnen Hostnamen für den Parameter host (bei einem privaten Endpunkt wird die Verwendung einer IP-Adresse, einer SCAN-IP oder eines SCAN-Hostnamens nicht unterstützt).

    Wenn Sie ROUTE_OUTBOUND_CONNECTIONS auf PRIVATE_ENDPOINT setzen, ist das Festlegen des Parameters private_target auf TRUE in dieser API nicht erforderlich. Weitere Informationen finden Sie unter Erweiterte Sicherheit für ausgehende Verbindungen mit privaten Endpunkten.

  2. Erstellen Sie eine PL/SQL-Prozedur, um E-Mails zu senden.
  3. Senden Sie eine Test-E-Mail mit der PL/SQL-Prozedur, die Sie in Schritt 2 erstellt haben.

    Beispiel:

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

SMTP-Authentifizierung mit Zugangsdatenobjekten festlegen

Beschreibt, wie Zugangsdatenobjekte an UTL_SMTP.SET_CREDENTIAL-APIs übergeben werden.

Das Unterprogramm SET_CREDENTIAL sendet den AUTH-Befehl zur Authentifizierung beim SMTP-Server.

Mit dem Unterprogramm UTL_SMTP.SET_CREDENTIAL können Sie Zugangsdatenobjekte übergeben, um die SMTP-Authentifizierung festzulegen. Zugangsdatenobjekte sind Schemaobjekte. Daher können nur berechtigte Benutzer auf sie zugreifen und Sie können Berechtigungen auf Schemaebene konfigurieren, um Zugriff auf die Zugangsdaten zu kontrollieren. Das Übergeben von Zugangsdatenobjekten ist eine geeignete und sichere Möglichkeit, Benutzername/Kennwort/Schlüssel für die Authentifizierung zu speichern und zu verwalten.

Das Unterprogramm UTL_SMTP.SET_CREDENTIAL ist eine sichere und praktische Alternative zum Unterprogramm UTL_SMTP.AUTH.

Beispiel


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

Wie im obigen Beispiel gezeigt, müssen Sie beim Aufrufen des Unterprogramms AUTH den Benutzernamen/das Kennwort als Teil der formalen PL/SQL-Parameter in Klartext übergeben. Möglicherweise müssen Sie den Benutzernamen/das Kennwort in verschiedene PL/SQL-Automatisierungs- oder Cron-Skripte einbetten. Das Übergeben von Klartextkennwörtern ist ein Complianceproblem, das im Unterprogramm UTL_SMTP.SET_CREDENTIAL behoben wird.

Weitere Informationen finden Sie unter Funktion und Prozedur AUTH.

UTL_SMTP.SET_CREDENTIAL-Syntax

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;

Beispiel

  • Zugangsdatenobjekt erstellen:

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

    Dadurch wird ein Zugangsdatenobjekt erstellt, das ein gespeichertes Benutzername/Kennwort-Paar erstellt.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

    Weitere Informationen finden Sie unter Zugangsdaten für Scheduler-Jobs angeben.

  • Führen Sie die Prozedur UTL_SMTP.SET_CREDENTIAL aus:

    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 diesem Beispiel wird der Befehl zur Authentifizierung an den SMTP-Server gesendet. Der Webserver benötigt diese Informationen, um die Anforderung zu autorisieren. Der Wert l_mail_conn ist die SMTP-Verbindung, SMTP_CRED der Zugangsdatenname und PLAIN das SMTP-Authentifizierungsschema.

Weitere Informationen finden Sie unter UTL_SMTP.

Informationen zu Einschränkungen für UTL_SMTP in Autonomous Database finden Sie unter PL/SQL-Packagehinweise für Autonomous Database.

E-Mail von Autonomous Database mit DBMS_CLOUD_NOTIFICATION senden

Verwenden Sie das Package DBMS_CLOUD_NOTIFICATION, um Nachrichten zu senden und Ergebnisse als E-Mail abzufragen.

Nachrichten als E-Mail von Autonomous Database senden

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

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.

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

    • Titel: 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.