Comment configurer mon instance Amazon RDS for Oracle pour envoyer des e-mails ?
Je souhaite configurer mon instance de base de données Amazon Relational Database Service (Amazon RDS) for Oracle afin d'envoyer des e-mails.
Brève description
Pour envoyer un e-mail à partir d'une instance Amazon RDS for Oracle, vous pouvez utiliser les packages UTL_MAIL ou UTL_SMTP.
- Pour utiliser UTL_MAIL avec RDS for Oracle, vous devez ajouter l'option UTL_MAIL dans le groupe d'options qui n'est pas associé par défaut à l'instance. Pour plus d'informations sur la configuration d'UTL_MAIL, veuillez consulter ORACLE UTL_MAIL.
- Pour utiliser UTL_SMTP avec RDS for Oracle, vous devez configurer un serveur SMTP sur une machine sur site ou sur une instance Amazon Elastic Compute Cloud (Amazon EC2) à l'aide d'Amazon Simple Email Service (Amazon SES). Dans ce cas, assurez-vous que la connectivité entre RDS for Oracle et le serveur SMTP soit correctement configurée.
Cet article se concentre sur la configuration de l'instance de base de données pour envoyer des e-mails via le package UTL_SMTP à l'aide d'Amazon SES.
Comme condition préalable, assurez-vous que le point de terminaison Amazon SES est accessible depuis l'instance RDS. Si votre instance RDS s'exécute dans un sous-réseau privé, vous devez ajouter une passerelle NAT dans la table de routage du sous-réseau. Cette opération est nécessaire pour que le sous-réseau puisse communiquer avec le point de terminaison Amazon SES. Pour vérifier la table de routage du sous-réseau, ouvrez la console Amazon VPC et choisissez Tables de routage dans le panneau de navigation.
Pour configurer votre instance de base de données afin d'envoyer des e-mails, procédez comme suit :
- Configurez le serveur de messagerie SMTP. Dans cet article, Amazon SES est utilisé pour configurer le serveur de messagerie SMTP.
- Créez une instance Amazon EC2. Configurez ensuite le client et le wallet Oracle à l'aide du certificat approprié.
- Chargez le wallet dans un compartiment Amazon Simple Storage Service (Amazon S3).
- Téléchargez le wallet depuis le compartiment Amazon S3 vers le serveur RDS à l'aide de l'intégration S3.
- Accordez les privilèges requis à l'utilisateur (s'il n'est pas un utilisateur principal) et créez les listes de contrôle d'accès (ACL) requises.
- Envoyez l'e-mail en utilisant les informations d'identification Amazon SES et la procédure décrite dans cet article.
Résolution
Configurez le serveur de messagerie SMTP à l'aide d'Amazon SES
Pour les instructions, veuillez consulter Comment configurer et se connecter à SMTP en utilisant Amazon SES ?
Créez une instance Amazon EC2 et configurez le client et le wallet Oracle
1. Créez une instance Linux Amazon EC2.
2. Installez le client Oracle qui a de préférence la même version que celle de l'instance Amazon RDS. Dans cet article, la version 19c d'Oracle est utilisée. Vous pouvez télécharger le client Oracle 19c, veuillez pour ce faire consulter Oracle Database 19c (19.3). Cette version est également livrée avec l'utilitaire orapki.
3. Installez AWS Command Line Interface (AWS CLI).
4. Autorisez la connexion sur le port de base de données du groupe de sécurité RDS à partir de l'instance EC2. Si les deux instances utilisent le même VPC, autorisez la connexion via leurs adresses IP privées.
5. Connectez-vous à l'instance EC2.
6. Exécutez la commande suivante pour télécharger le certificat AmazonRootCA1.
wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
7. Exécutez les commandes suivantes pour créer le wallet :
orapki wallet create -wallet . -auto_login_only orapki wallet add -wallet . -trusted_cert -cert AmazonRootCA1.pem -auto_login_only
Chargez le wallet sur Amazon S3
1. Exécutez la commande suivante pour charger le wallet vers un compartiment Amazon S3 :
Remarque : assurez-vous que le compartiment S3 se trouve dans la même région que l'instance RDS pour que l'intégration S3 fonctionne.
aws s3 cp cwallet.sso s3://testbucket/
2. Exécutez la commande suivante pour vérifier si le fichier a été téléchargé avec succès :
aws s3 ls testbucket
Téléchargez le wallet sur le serveur RDS à l'aide de l'intégration S3
1. Créez un groupe d'options à l'aide de la console Amazon RDS.
2. Ajoutez l'option S3_INTEGRATION dans le groupe d'options que vous avez créé. Cette opération est nécessaire pour télécharger le fichier de wallet d'Amazon S3 vers l'instance RDS.
3. Créez une instance RDS for Oracle avec le groupe d'options que vous avez créé.
4. Préparez-vous à l'intégration S3 en créant une stratégie et un rôle AWS Identity and Access Management (IAM). Pour plus d'informations, veuillez consulter Conditions préalables à l'intégration d'Amazon RDS for Oracle avec Amazon S3.
5. Exécutez les commandes suivantes pour télécharger le wallet dans RDS à partir du compartiment S3 :
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
Accordez les privilèges requis à l'utilisateur et créez les listes de contrôle d'accès (ACL) requises
Remarque : vous avez besoin de cette étape si vous utilisez l'utilisateur non principal pour RDS for Oracle.
Exécutez la commande suivante pour accorder les privilèges requis à l'utilisateur non principal :
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_DIRECTORIES', p_grantee => 'example-username', p_privilege => 'SELECT'); end; /
Exécutez les commandes suivantes pour créer les ACL requises :
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; /
Envoyer l'e-mail
Exécutez la procédure suivante pour envoyer l'e-mail :
Remarque : assurez-vous de remplacer les valeurs suivantes dans la procédure :
- example-server par le nom de votre serveur de messagerie SMTP
- example-sender-email par l'adresse e-mail de l'expéditeur
- example-receiver-email par l'adresse e-mail du destinataire
- example-SMTP-username par votre nom d'utilisateur
- example-SMTP-password par votre mot de passe
Si vous utilisez une machine sur site ou une instance Amazon EC2 comme serveur SMTP, veillez à utiliser les informations relatives au serveur sur site ou à l’instance EC2 au lieu d'Amazon SES.
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; /
Dépannage des erreurs
ORA-29279 : si votre nom d'utilisateur ou votre mot de passe SMTP est inexact, l'erreur suivante peut survenir
ORA-29279: SMTP permanent error: 535 Authentication Credentials Invalid
Pour résoudre ce problème, vérifiez que vos informations d'identification SMTP sont exactes.
ORA-00942 : si le package de messagerie est exécuté par un utilisateur non principal, l'erreur suivante peut survenir :
PL/SQL: ORA-00942: table or view does not exist
Pour résoudre ce problème, accordez les autorisations requises à l'utilisateur en exécutant la procédure suivante :
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_DIRECTORIES', p_grantee => 'example-username', p_privilege => 'SELECT'); end; /
ORA-24247 : si une liste de contrôle d'accès (ACL) n'est pas attribuée à l'hôte cible ou si l'utilisateur ne dispose pas des privilèges requis pour accéder à l'hôte cible, l'erreur suivante peut survenir :
ORA-24247: network access denied by access control list (ACL)
Pour résoudre ce problème, créez une liste de contrôle d'accès (ACL) et attribuez-la à l'hôte en exécutant la procédure suivante :
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; /
Informations connexes
Documentation Oracle pour la Vue d'ensemble du service de livraison d'e-mails
Contenus pertinents
- demandé il y a 6 moislg...
- demandé il y a 8 jourslg...
- Réponse acceptéedemandé il y a 9 moislg...
- demandé il y a 9 moislg...
- demandé il y a 3 moislg...
- AWS OFFICIELA mis à jour il y a 9 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans