Oracle / UTL_MAIL paketi ile PL/SQL kullanarak mail gönderme

UTL_MAIL genel e-mail fonksiyonlarının kullanımı için hazırlanmış pakettir. Dosya ekleme, BCC, CC, öncelik belirleme özelliklerini destekler.

UTL_MAIL.SEND (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS,
mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=us-ascii',
priority IN PLS_INTEGER DEFAULT NULL);

Kurulum
UTL_MAIL paketi varsayılan oracle kurulumu ile birlikte gelmez bunun için kurulum işlemini aşağıdaki şekilde gerçekleştirebilirsiniz.

sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb

Örnek kullanımı aşağıdaki gibi gerçekleştirilebilir. Aşağıda yaratılan prosedür Jobs altına eklenerek, düzenli olarak rapor göndermesi sağlanmıştır.

CREATE OR REPLACE PROCEDURE RAPORTOR.RAPOR1
IS

v_sqlstr VARCHAR2 (32000);
vmsg VARCHAR2 (32000) := NULL;
TYPE data_rec IS REF CURSOR;
p_cursor data_rec;
TYPE gap_table IS RECORD
(
NO varchar(7),
KOLON1 VARCHAR (64),
KOLON2 VARCHAR2 (64)
);

gap_rec gap_table;

BEGIN

v_sqlstr := 'SELECT KOLON1, KOLON2 FROM TABLO1 WHERE NO>4';

--DBMS_OUTPUT.put_line ('TEST');
--DBMS_OUTPUT.put_line (v_sqlstr);


vmsg := '<table border=1><tr bgcolor=lightgreen><td>NO</td><td>KOLON1</td><td>KOLON2</td></tr>';
OPEN p_cursor FOR v_sqlstr;

LOOP
FETCH p_cursor INTO gap_rec;
EXIT WHEN p_cursor%NOTFOUND;

vmsg :=
vmsg
|| ' ' || '<tr bgcolor=azure ><td>'||gap_rec.NO
||'</td><td>'|| gap_rec.KOLON1
||'</td><td align="right">'|| gap_rec.KOLON2
||'</td>'
||'</tr>'|| CHR (13)
|| CHR (10);
END LOOP;
CLOSE p_cursor;


vmsg := vmsg || '</table>';

UTL_MAIL.send (sender => 'iletisim@siyahsapka.org',
recipients => 'iletisim@siyahsapka.org',
cc => NULL,
bcc => NULL,
subject => TO_CHAR (SYSDATE - 1, 'yyyy-mm-dd')
|| ' < - > '
|| 'Tarihli'
|| ' '
|| ' RAPOR1',
MESSAGE => '<body> <font color="#FF0000"> <b>'
|| CHR (10)
-- || null
-- || '</b></font> Tarihli rapor 1 alinabilir.'
|| CHR (10)
|| CHR (10)
|| vmsg
|| '<br>'
|| CHR (10)
|| ' '
|| CHR (10)
|| '<font color="#000000"> Iyi Calismalar.<br>',
mime_type => 'text/html; charset=charset=windows-1254',
priority => 3);

DBMS_OUTPUT.put_line (vmsg);

END;
/

 

2011 İzmir, Ali Okan Yuksel,
aokany@gmail.com,