E-Mails in Autonomous Database senden

Zum Senden von E-Mails gibt es in Autonomous Database eine Reihe von Optionen. 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

beschreiben die Schritte, um E-Mails mit UTL_SMTP in Autonomous Database zu senden

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

  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
    Hinweis

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

    Weitere Informationen finden Sie unter SMTP-Verbindung konfigurieren.

  2. Generieren Sie SMTP-Zugangsdaten für Email Delivery UTL_SMTP authentifiziert sich mit Zugangsdaten 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 Verwalten von genehmigten Sendern.

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

    Beispiele:

    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 zum Senden von E-Mail.

    Beispielcode finden Sie unter Beispielcode für das Senden von E-Mail mit SMTP.

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

    Beispiele:

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

Informationen zu UTL_SMTP finden Sie unter UTL_SMTP.

Informationen zu UTL_SMTP-Beschränkungen bei Autonomous Database finden Sie unter Hinweise zu PL/SQL-Package für Autonomous Database.

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

Zeigt Beispielcode für das Senden von E-Mails mit UTL_SMTP in 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;
/

Wobei:

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

Beschreibt die Schritte zum Senden von E-Mails mit einem E-Mail-Provider an einem privaten Endpunkt.

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 zugänglich sein (privater Endpunkt der Autonomous Database-Instanz). Beispiel: Sie können auf einen E-Mail-Provider zugreifen, wenn Folgendes zutrifft:

  • Die Autonomous Database-Quellinstanz und 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, aber gepaarten Oracle Cloud Infrastructure-VCNs.

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

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

  • Definieren Sie eine Egress-Regel in der Subnetzsicherheitsliste oder Netzwerksicherheitsgruppe der Quelldatenbank so, dass 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 so, dass der Traffic von der IP-Adresse der Autonomous Database-Instanz 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 an einem privaten Endpunkt:

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

    Beispiele:

    -- 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 (auf 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 Setzen 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 zum Senden von E-Mail.
  3. Senden Sie eine Test-E-Mail mit der PL/SQL-Prozedur, die Sie in Schritt 2 erstellt haben.

    Beispiele:

    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 privilegierte Benutzer auf sie zugreifen, und Sie können Berechtigungen auf Schemaebene konfigurieren, um auf die Zugangsdaten zuzugreifen. Das Übergeben von Zugangsdatenobjekten ist eine geeignete und sichere Möglichkeit, Benutzernamen/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 Klartextpasswörtern ist ein Complianceproblem, das im Unterprogramm UTL_SMTP.SET_CREDENTIAL behoben wird.

Weitere Informationen finden Sie unter AUTH-Funktion.

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

  • Erstellen Sie ein Zugangsdatenobjekt:

    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 beim 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 ist der Zugangsdatenname und PLAIN ist das SMTP-Authentifizierungsschema.

Weitere Informationen finden Sie unter UTL_SMTP.

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

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

Mit 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 authentifiziert sich mit Zugangsdaten 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 Verwalten von genehmigten Sendern.

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

    Beispiele:

    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 den Absender, smtp_host, den Betreff, den Empfänger und die Empfänger eines CC oder BCC in den Werten von string anzugeben.

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

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

    • Thema: 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 eine Kopie 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 von Autonomous Database senden

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 authentifiziert sich mit Zugangsdaten 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 Verwalten von genehmigten Sendern.

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

    Beispiele:

    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 den Absender, smtp_host, den Betreff, den Empfänger, die Empfänger eines CC oder BCC, die Nachricht, den Datentyp und den Titel in den Werten von String anzugeben.
    • Absender: Gibt die E-Mail-ID des genehmigten Absenders aus Schritt 3 an.

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

    • Thema: 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 eine Kopie 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.