Der Datenbank-Server ist als Smart-Relay konfiguriert und kann somit die Mails an den Mailserver ohne Authentifizierung weiterleiten.
Der Versand einer E-Mail erfolgt über das Package UTL_MAIL.
Installation von UTL_MAIL in einer CDB oder PDB as User SYS:
Installation UTL_MAIL:
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb
Die ACL zum Zugriff auf das Netzwerk muss eingerichtet sein.
Hier wird die ACL für Public freigegeben, da der Zugriff auf über das Package beschränkt ist.
Als User SYS:
ACL anlegen:
-- Einrichten der ACL
begin
dbms_network_acl_admin.create_acl(
acl => 'email.xml',
description => 'Versenden von E-Mails',
principal => 'PUBLIC', -- PARSING SCHEMA der Anwendung
is_grant => true,
privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'email.xml',
principal => 'PUBLIC', -- PARSING SCHEMA der Anwendung
is_grant => true,
privilege => 'resolve'
);
dbms_network_acl_admin.assign_acl(
acl => 'email.xml',
host => 'localhost',
lower_port => 25,
upper_port => 25
);
end;
/
ACL prüfen:
select * from DBA_NETWORK_ACLS;
select * from DBA_NETWORK_ACL_PRIVILEGES;
ACL löschen:
begin
dbms_network_acl_admin.drop_acl(acl => 'email.xml');
end;
/
E-Mail versenden:
declare
host varchar2(64);
subject varchar2(512);
pdb varchar2(64);
username varchar2(64);
message varchar2(512);
BEGIN
select host_name into host from v$instance;
select name into pdb from v$containers where rownum=1 order by con_id;
subject:= 'Testmail aus der PDB: ' || pdb;
username:= sys_context('USERENV', 'CURRENT_SCHEMA');
message:= 'Testmail vom User ' || username || ' aus der Datenbank ' || pdb || '.';
EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''localhost''';
UTL_MAIL.send(sender => 'oracle@' || host,
recipients => 'oracle@localhost',
subject => subject,
message => message,
mime_type => 'text; charset=UTF-8');
END;
/