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