New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie sende ich eine E-Mail von meiner Amazon RDS for Oracle DB-Instance?
Ich möchte meine Amazon Relational Database Service (Amazon RDS) for Oracle DB-Instance für den Versand von E-Mails konfigurieren.
Kurzbeschreibung
Um eine E-Mail von einer RDS for Oracle DB-Instance zu senden, verwenden Sie die Pakete UTL_MAIL oder UTL_SMTP. Um UTL_MAIL mit RDS for Oracle zu verwenden, fügen Sie die Option UTL_MAIL in die nicht standardmäßige Optionsgruppe ein, die an die Instance angehängt ist. Weitere Informationen zur Konfiguration von UTL_MAIL finden Sie unter Oracle UTL_MAIL.
Um ULT_SMTP mit RDS for Oracle zu verwenden, konfigurieren Sie einen SMTP-Server auf einem lokalen Computer oder verwenden Sie Amazon Simple Email Service (Amazon SES). Stellen Sie sicher, dass die Konnektivität von der RDS for Oracle DB-Instance zum SMTP-Server korrekt konfiguriert ist.
Die folgende Lösung erklärt, wie Amazon SES zum Senden von E-Mails über das UTL_SMTP-Paket verwendet wird.
Voraussetzungen
Vergewissern Sie sich, dass Ihr Amazon-SES-Endpunkt von Ihrer RDS-DB-Instance aus zugänglich ist. Wenn Ihre DB-Instance in einem privaten Subnetz läuft, erstellen Sie einen Virtual Private Cloud (VPC)-Endpunkt für Amazon SES.
Hinweis: Für DB-Instances, die in einem privaten Subnetz ausgeführt werden, können Sie auch ein NAT-Gateway verwenden, um mit dem Amazon-SES-Endpunkt zu kommunizieren.
Konfigurieren Sie Ihre DB-Instance für den Versand von E-Mails
Gehen Sie wie folgt vor, um Ihre DB-Instance für den Versand von E-Mails zu konfigurieren:
- Verwenden Sie Amazon SES, um den SMTP-Mailserver einzurichten.
- Erstellen Sie einen VPC-Endpunkt für Amazon SES.
- Erstellen Sie eine Amazon Elastic Compute Cloud (Amazon EC2)-Linux-Instance. Verwenden Sie dann das entsprechende Zertifikat, um den Oracle-Client und die Wallet zu konfigurieren.
- Laden Sie die Wallet in einen Amazon Simple Storage Service (Amazon S3)-Bucket hoch.
- Verwenden Sie die Amazon-S3-Integration, um die Wallet aus dem Amazon-S3-Bucket auf den Amazon-RDS-Server herunterzuladen.
- Erteilen Sie Benutzern, die keine primären Benutzer sind, die erforderlichen Berechtigungen und erstellen Sie dann die erforderlichen Netzwerkzugriffskontrolllisten (Network Access Control Lists, Netzwerk-ACLs).
- Verwenden Sie Ihre Amazon-SES-Anmeldeinformationen, um die E-Mail zu senden.
Behebung
Hinweis: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Beheben von AWS-CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
Einrichtung des SMTP-Mailservers
Anweisungen zur Verwendung von Amazon SES zur Einrichtung eines SMTP-Mailservers finden Sie unter Wie richte ich SMTP mithilfe von Amazon SES ein und stelle eine Verbindung dazu her?
Erstellen einer VPC mit Amazon SES
Anweisungen zur Verwendung von Amazon SES zum Erstellen einer VPC finden Sie unter Einrichten von VPC-Endpunkten mit Amazon SES.
Erstellen Sie eine Amazon-EC2-Instance und konfigurieren Sie den Oracle-Client und die Wallet
Führen Sie die folgenden Schritte aus:
-
Installieren Sie einen Oracle-Client.
Hinweis: Es ist eine bewährte Methode, einen Client zu verwenden, der dieselbe Version wie Ihre DB-Instance hat. Für diese Behebung wird Oracle-Version 19c verwendet. Informationen zum Herunterladen dieses Clients finden Sie unter Oracle Database 19c (19.3) auf der Oracle-Website. Diese Version enthält das Tool orapki. -
Öffnen Sie die AWS CLI.
-
Erlauben Sie von der EC2-Instance aus die Verbindung über den Datenbank-Port in der Amazon-RDS-Sicherheitsgruppe. Wenn die DB-Instance und die EC2-Instance dieselbe VPC verwenden, verwenden Sie ihre privaten IP-Adressen, um die Verbindung zuzulassen.
-
Führen Sie den folgenden Befehl aus, um das AmazonRootCA1-Zertifikat herunterzuladen:
wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
-
Führen Sie die folgenden Befehle aus, um die Wallet zu erstellen:
orapki wallet create -wallet . -auto_login_only orapki wallet add -wallet . -trusted_cert -cert AmazonRootCA1.pem -auto_login_only
Laden Sie die Wallet auf Amazon S3 hoch
Führen Sie die folgenden Schritte aus:
-
Führen Sie den folgenden Befehl aus, um die Wallet in einen Amazon-S3-Bucket hochzuladen:
Hinweis: Der S3-Bucket muss sich in derselben AWS-Region wie die DB-Instance befinden.aws s3 cp cwallet.sso s3://testbucket/
-
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Datei erfolgreich hochgeladen wurde:
aws s3 ls testbucket
Verwenden Sie die Amazon-S3-Integration, um die Wallet auf den Amazon-RDS-Server herunterzuladen
Führen Sie die folgenden Schritte aus:
- Öffnen Sie die Amazon-RDS-Konsole und erstellen Sie dann eine Optionsgruppe.
- Fügen Sie die Option S3_INTEGRATION zur Optionsgruppe hinzu.
- Erstellen Sie eine DB-Instance mit der Optionsgruppe.
- Erstellen einer Richtlinie und Rolle für AWS Identity and Access Management (IAM). Weitere Informationen finden Sie unter Konfiguration von IAM-Berechtigungen für RDS für die Oracle-Integration mit Amazon S3.
- Führen Sie die folgenden Befehle aus, um die Wallet aus dem S3-Bucket auf Amazon RDS herunterzuladen:
SQL> exec rdsadmin.rdsadmin_util.create_directory('S3_WALLET'); PL/SQL procedure successfully completed. SQL> SELECT OWNER,DIRECTORY_NAME,DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME='S3_WALLET'; OWNER DIRECTORY_NAME DIRECTORY_PATH -------------------- ------------------------------ ---------------------------------------------------------------------- SYS S3_WALLET /rdsdbdata/userdirs/01 SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'testbucket', p_directory_name => 'S3_WALLET', P_S3_PREFIX => 'cwallet.sso') AS TASK_ID FROM DUAL; TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1625291989577-52 SQL> SELECT filename FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('S3_WALLET')); FILENAME -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 01/ cwallet.sso
Für Benutzer, die keine primären Benutzer von RDS for Oracle sind: Gewähren Sie dem Benutzer die erforderlichen Berechtigungen und erstellen Sie die erforderlichen Netzwerk-ACLs
Führen Sie den folgenden Befehl aus, um dem Nicht-Primärbenutzer die erforderlichen Berechtigungen zu gewähren:
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_DIRECTORIES', p_grantee => 'example-username', p_privilege => 'SELECT'); end; /
Führen Sie die folgenden Befehle aus, um die erforderlichen Netzwerk-ACLs zu erstellen:
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'ses_1.xml', description => 'AWS SES ACL 1', principal => 'TEST', is_grant => TRUE, privilege => 'connect'); COMMIT; END; / BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'ses_1.xml', host => 'example-host'); COMMIT; END; /
Senden der E-Mail
Führen Sie das folgende Verfahren aus, um die E-Mail zu senden.
Hinweis: Ersetzen Sie die folgenden Werte durch Ihre Werte:
- example-server durch dem Namen Ihres SMTP-Mailservers
- example-sender-email durch die Absender-E-Mail-Adresse
- example-receiver-email durch die E-Mail-Adresse des Empfängers
- example-SMTP-username durch Ihren Benutzernamen
- example-SMTP-password durch Ihr Passwort
Wenn Sie einen lokalen SMTP-Server oder Amazon EC2 als SMTP-Server verwenden, ersetzen Sie die Amazon-SES-Informationen durch Ihre lokalen oder EC2-Serverdetails.
declare l_smtp_server varchar2(1024) := 'example-server'; l_smtp_port number := 587; l_wallet_dir varchar2(128) := 'S3_WALLET'; l_from varchar2(128) := 'example-sender-email'; l_to varchar2(128) := 'example-receiver-email'; l_user varchar2(128) := 'example-SMTP-username'; l_password varchar2(128) := 'example-SMTP-password'; l_subject varchar2(128) := 'Test mail from RDS Oracle'; l_wallet_path varchar2(4000); l_conn utl_smtp.connection; l_reply utl_smtp.reply; l_replies utl_smtp.replies; begin select 'file:/' || directory_path into l_wallet_path from dba_directories where directory_name=l_wallet_dir; --open a connection l_reply := utl_smtp.open_connection( host => l_smtp_server, port => l_smtp_port, c => l_conn, wallet_path => l_wallet_path, secure_connection_before_smtp => false); dbms_output.put_line('opened connection, received reply ' || l_reply.code || '/' || l_reply.text); --get supported configs from server l_replies := utl_smtp.ehlo(l_conn, 'localhost'); for r in 1..l_replies.count loop dbms_output.put_line('ehlo (server config) : ' || l_replies(r).code || '/' || l_replies(r).text); end loop; --STARTTLS l_reply := utl_smtp.starttls(l_conn); dbms_output.put_line('starttls, received reply ' || l_reply.code || '/' || l_reply.text); -- l_replies := utl_smtp.ehlo(l_conn, 'localhost'); for r in 1..l_replies.count loop dbms_output.put_line('ehlo (server config) : ' || l_replies(r).code || '/' || l_replies(r).text); end loop; utl_smtp.auth(l_conn, l_user, l_password, utl_smtp.all_schemes); utl_smtp.mail(l_conn, l_from); utl_smtp.rcpt(l_conn, l_to); utl_smtp.open_data (l_conn); utl_smtp.write_data(l_conn, 'Date: ' || to_char(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || utl_tcp.crlf); utl_smtp.write_data(l_conn, 'From: ' || l_from || utl_tcp.crlf); utl_smtp.write_data(l_conn, 'To: ' || l_to || utl_tcp.crlf); utl_smtp.write_data(l_conn, 'Subject: ' || l_subject || utl_tcp.crlf); utl_smtp.write_data(l_conn, '' || utl_tcp.crlf); utl_smtp.write_data(l_conn, 'Test message.' || utl_tcp.crlf); utl_smtp.close_data(l_conn); l_reply := utl_smtp.quit(l_conn); exception when others then utl_smtp.quit(l_conn); raise; end; /
Fehler beheben
ORA-29279: Wenn Ihr SMTP-Benutzername oder -Passwort falsch ist, wird möglicherweise die folgende Fehlermeldung angezeigt:
„ORA-29279: SMTP permanent error: 535 Authentication Credentials Invalid“
Stellen Sie sicher, dass Ihre SMTP-Anmeldeinformationen korrekt sind, um dieses Problem zu beheben.
ORA-00942: Wenn ein nicht primärer Benutzer das E-Mail-Paket ausführt, wird möglicherweise die folgende Fehlermeldung angezeigt:
„PL/SQL: ORA-00942: table or view does not exist“
Identifizieren Sie das Objekt, das keinen Zugriff hat, und gewähren Sie dann die erforderlichen Berechtigungen. Wenn beispielsweise bestimmte Berechtigungen für SYS-eigene Objekte fehlen, wie DBA_directories für expample-username, führen Sie den folgenden Befehl aus:
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_DIRECTORIES', p_grantee => 'example-username', p_privilege => 'SELECT'); end; /
ORA-24247: Wenn Sie dem Zielhost die Netzwerk-ACL nicht zugewiesen haben, erhalten Sie die folgende Fehlermeldung. Sie erhalten diesen Fehler auch, wenn der Benutzer nicht über die erforderlichen Berechtigungen für den Zugriff auf den Zielhost verfügt:
„ORA-24247: network access denied by access control list (ACL)“
Um dieses Problem zu beheben, führen Sie das folgende Verfahren aus, um eine Netzwerk-ACL zu erstellen und die Netzwerk-ACL dem Host zuzuweisen:
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'ses_1.xml', description => 'AWS SES ACL 1', principal => 'TEST', is_grant => TRUE, privilege => 'connect'); COMMIT; END; / BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'ses_1.xml', host => 'example-host'); COMMIT; END; /
ORA-29278: Wenn Sie die Sicherheitsgruppen, die Firewall oder die Netzwerk-ACL nicht richtig konfigurieren, erhalten Sie die folgende Fehlermeldung:
„ORA-29278: SMTP transient error: 421 Service not available“
Stellen Sie sicher, dass Sie die Netzwerkkonfiguration korrekt eingerichtet haben, um dieses Problem zu beheben. Sie können die VPC-Flow-Protokolle auch auf die folgenden Informationen überprüfen:
- Analysieren von Quell- und Ziel-IP-Adressen: Stellen Sie anhand der VPC-Flow-Protokolle sicher, dass Daten, die von den Quell- und Ziel-IP-Adressen übertragen werden, Antworten erhalten.
- Überprüfen des Ports und des Protokolls: Vergewissern Sie sich, dass der richtige Port und das richtige Protokoll verwendet werden und dass keine ungewöhnlichen Abweichungen vorliegen.
- Sicherheitsgruppen- und Netzwerk-ACLs: Überprüfen Sie die Sicherheitsgruppen- und Netzwerk-ACL-Konfigurationen, um sicherzustellen, dass sie den Datenverkehr auf dem erforderlichen Port zulassen.
- Subnetz-Routing: Stellen Sie sicher, dass die Routing-Tabellen in den relevanten Subnetzen korrekt konfiguriert sind, um den Datenverkehr an den Datenbankserver weiterzuleiten.
- Latenz und Paketverlust: Achten Sie auf Latenz oder Paketverlust. Latenz und Paketverlust können auf Netzwerkprobleme hinweisen.
Weitere Informationen finden Sie unter Protokollieren von IP-Datenverkehr mit VPC Flow Logs und Fehlerbehebung für ORA-29278 und ORA-29279 bei der Verwendung von UTL_SMTP (Doc-ID 2287232.1) auf der Oracle-Website.
ORA-29279: Wenn Sie keine Identität auf Amazon SES erstellt haben, wird möglicherweise die folgende Fehlermeldung angezeigt:
„ORA-29279: SMTP permanent error: 554 Message rejected: Email address is not verified. The following identities failed the check in region <REGION>:'example-sender-email'“
Um dieses Problem zu beheben, konfigurieren Sie eine Identität auf Domänenebene oder erstellen Sie eine E-Mail-Adressidentität. Weitere Informationen finden Sie unter Identitäten in Amazon SES erstellen und verifizieren.
Testen Sie die Konnektivität von Amazon RDS zu Ihrem Amazon-SES-Endpunkt
Führen Sie das folgende Verfahren aus, um die Verbindung zwischen Amazon RDS und dem Amazon-SES-Endpunkt zu testen:
CREATE OR REPLACE FUNCTION fn_check_network (p_remote_host in varchar2, -- host name p_port_no in integer default 587 ) RETURN number IS v_connection utl_tcp.connection; BEGIN v_connection := utl_tcp.open_connection(REMOTE_HOST=>p_remote_host, REMOTE_PORT=>p_port_no, IN_BUFFER_SIZE=>1024, OUT_BUFFER_SIZE=>1024, TX_TIMEOUT=>5); RETURN 1; EXCEPTION WHEN others THEN return sqlcode; END fn_check_network; /
SELECT fn_check_network('email-smtp.<region>.amazonaws.com', 587) FROM dual;
Wenn die Prozedur erfolgreich ist, gibt die Funktion 1 zurück. Wenn die Prozedur fehlschlägt, gibt die Funktion ORA -29260 zurück.
Ähnliche Informationen
Überblick über den E-Mail-Zustelldienst auf der Oracle-Website
UTL_SMTP auf der Oracle-Website

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren