Mit Version 11.2.0.2 wurde das altbekannte Package UTL_SMTP erweitert. Die wichtigste Neuerung liegt darin, dass jetzt auch SSL-verschlüsselte Mails verschickt werden können. Daneben wurde die Authentifizierung am Mailserver vereinfacht, dafür gibt es jetzt einen eigenen Aufruf.
Wie immer, wenn es um SSL geht, wird auch hierfür ein Wallet benötigt, das erst eingerichtet werden muss. Dieses Wallet muss das Zertifikat des Mailservers beinhalten. Der Speicherort des Wallets wird beim Öffnen der SMTP-Verbindung mitgegeben, zusammen mit dem Passwort des Wallets, daher kann er beliebig gewählt werden. Auto-Login ist nicht erforderlich.
Beim Öffnen der SMTP-Verbindung muss das Wallet mitgegeben werden, wenn die Mail über SSL versandt werden soll. Hier wird normalerweise bereits eine sichere Verbindung über SSL/TLS aufgebaut, bevor eine SMTP-Kommunikation stattfindet. Falls der Mailserver dies zulässt und ein STARTTLS-Kommando erlaubt, kann auch zunächst eine unverschlüsselte Verbindung angefordert werden, und erst danach wird auf eine verschlüsselte Verbindung gewechselt.
Beispiel:
DECLARE
v_sender VARCHAR2 (2000) := 'h.asenbauer@muniqsoft.de';
v_rec VARCHAR2 (2000) := 'h.asenbauer@muniqsoft.de';
v_host VARCHAR2 (2000) := 'my_mailserver';
v_con UTL_SMTP.connection;
crlf VARCHAR2 (2) := CHR (13) || CHR (10);
v_user RAW (200);
v_pwd RAW (200);
BEGIN
v_con :=
UTL_SMTP.open_connection
(HOST => v_host,
port => 465,
tx_timeout => 2,
wallet_path => 'file:C:\app\admin\o11g\WALLET',
wallet_password => 'WALLET_PWD',
secure_connection_before_smtp => true
);
UTL_SMTP.helo (v_con, v_host);
-- verschlüsselte Verbindung erst später initiieren:
-- (nur möglich, wenn secure_connection_before_smtp = false)
-- UTL_SMTP.STARTTLS(v_con);
-- Authentifizierung
UTL_SMTP.AUTH
(c => v_con,
username => 'my_username',
password =>'my_password',
schemes => UTL_SMTP.NON_CLEARTEXT_PASSWORD_SCHEMES);
UTL_SMTP.mail (v_con, v_sender);
UTL_SMTP.rcpt (v_con, v_rec);
UTL_SMTP.open_data (v_con);
UTL_SMTP.write_data (v_con, 'To: ' || v_rec || '<' || v_rec || '>' || crlf);
UTL_SMTP.write_data (v_con, 'Subject: UTL_SMTP' || crlf);
UTL_SMTP.write_data (v_con, 'Diese Mial wurde über SSL versandt');
UTL_SMTP.close_data (v_con);
UTL_SMTP.quit (v_con);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
-- falls bereits das Öffnen fehlschlägt, führt quit-Befehl zu Fehler
BEGIN
UTL_SMTP.quit (v_con);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END;
/
Wenn das Wallet nicht gefunden wird oder nicht geöffnet werden kann, so führt der Versuch, die Verbindung aufzubauen, zu folgender Fehlermeldung:
ORA-29106: PKCS #12 -Wallet kann nicht importiert werden
Fehlt das Zertifikat des Mailservers im Wallet, so lautet die Fehlermeldung:
ORA-29024: Zertifikatvalidierung nicht erfolgreich
Die ebenfalls mit Version 11.2.0.2 neue eingeführte Prozedur UTL_SMTP.AUTH ist nicht von SSL-Verschlüsselung abhängig; sie erspart nur die umständlichen, zur Authentifizierung früher nötigen utl_smtp.command-Aufrufe.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.