Mar
12
2014

Database üzerinden Yerel Bir Mail Sunucusu Kullanılarak Mail Atma Örnek Scripti

Merhaba,

Db üzerinden çalışan bir prosedür ile yerelde tanımlı bir mail sunucusu üzerinden mail göndermek için kullanılabilecek basit bir script örneğini aşağıda bulabilirsiniz.

(Gönderilen mail mesajı bir stylesheet aracılığı ile html tagları içerisine alınarak formatlanır ve o şekilde gönderilir !)

 

 

DECLARE
x_return_status VARCHAR2 (1);
l_message CLOB := ‘Denemedir !’;
l_subject VARCHAR2 (240) := ‘Deneme Maili Hakkında ‘;
l_recipient VARCHAR2 (240) := ‘xxx@xxx.com’;
–> birden fazla kişiye gönderdilmek istenirse mail adresleri arasına “;” yazılarak gönderilmelidir (1@xxx.com;2@xxx.com)
l_sender VARCHAR2 (240) := ‘xxx@oracle.com’;
BEGIN
xxxx_send_mail (p_sender => l_sender,
p_recipient => l_recipient,
p_subject => l_subject,
p_message => l_message,
x_return_status => x_return_status
);
DBMS_OUTPUT.put_line (‘ x_return_status = ‘ || x_return_status);
END;

 

dbms_output.put_line (‘ x_return_status =   ‘ || x_return_status);

end;

 

 

 
CREATE OR REPLACE PROCEDURE xxxx_send_mail (
p_sender IN VARCHAR2,
p_recipient IN VARCHAR2,
p_subject IN VARCHAR2,
p_message IN CLOB,
x_return_status OUT VARCHAR2
)
AS
l_mailhost VARCHAR2 (255) := ‘172.16.16.77’; –> yerel sunucunun ip adresi
l_port NUMBER := 25; –> yerel sunucunun portu
l_mail_conn UTL_SMTP.connection;
v_add_src VARCHAR2 (10000);
v_addr VARCHAR2 (10000);
slen NUMBER := 1;
crlf VARCHAR2 (4) := CHR (13) || CHR (10);
i NUMBER (12);
len NUMBER (12);
part NUMBER (12) := 16384;
l_stylesheet CLOB
:= ‘
<html><head>
<style type=”text/css”>
body { font-family : Verdana, Arial;
font-size : 8pt;}

.green { color : #00AA00;
font-weight : bold;}

.red { color : #FF0000;
font-weight : bold;}

pre { margin-left : 10px;}

table { empty-cells : show;
border-collapse : collapse;
width : 100%;
border : solid 2px #444444;}

td { border : solid 1px #444444;
font-size : 8pt;
padding : 1px;}

th { background : #EEEEEE;
border : solid 1px #444444;
font-size : 8pt;
padding : 2px;}

dt { font-weight : bold; }

</style>
</head>
<body>’;
BEGIN
l_mail_conn := UTL_SMTP.open_connection (l_mailhost, l_port);
UTL_SMTP.helo (l_mail_conn, l_mailhost);
UTL_SMTP.mail (l_mail_conn, p_sender);

IF (INSTR (p_recipient, ‘;’) = 0)
THEN
UTL_SMTP.rcpt (l_mail_conn, p_recipient);
ELSE
v_add_src := p_recipient || ‘;’;

WHILE (INSTR (v_add_src, ‘;’, slen) > 0)
LOOP
v_addr :=
SUBSTR (v_add_src, slen,
INSTR (SUBSTR (v_add_src, slen), ‘;’) – 1);
slen := slen + INSTR (SUBSTR (v_add_src, slen), ‘;’);
UTL_SMTP.rcpt (l_mail_conn, v_addr);
END LOOP;
END IF;

UTL_SMTP.open_data (l_mail_conn);
UTL_SMTP.write_data (l_mail_conn,
‘MIME-version: 1.0’
|| crlf
|| ‘Content-Type: text/html; charset=iso-8859-9’
|| crlf
|| — charset=ISO-8859-15
‘Content-Transfer-Encoding: 8bit’
|| crlf
|| ‘Date: ‘
|| TO_CHAR (SYSDATE, ‘Dy, DD Mon YYYY hh24:mi:ss’)
|| crlf
|| ‘From: ‘
|| p_sender
|| crlf
|| ‘Subject: ‘
|| p_subject
|| crlf
|| ‘To: ‘
|| p_recipient
|| crlf
);
UTL_SMTP.write_raw_data (l_mail_conn, UTL_RAW.cast_to_raw (l_stylesheet));
i := 1;
len := DBMS_LOB.getlength (p_message);

WHILE (i < len)
LOOP
UTL_SMTP.write_raw_data
(l_mail_conn,
UTL_RAW.cast_to_raw (DBMS_LOB.SUBSTR (p_message,
part,
i
)
)
);
i := i + part;
END LOOP;

UTL_SMTP.write_raw_data (l_mail_conn,
UTL_RAW.cast_to_raw (‘</body></html>’)
);
UTL_SMTP.close_data (l_mail_conn);
UTL_SMTP.quit (l_mail_conn);
x_return_status := ‘S’;
EXCEPTION
WHEN UTL_SMTP.invalid_operation
THEN
UTL_SMTP.quit (l_mail_conn);
x_return_status := ‘E’;
WHEN UTL_SMTP.transient_error
THEN
UTL_SMTP.quit (l_mail_conn);
x_return_status := ‘E’;
WHEN UTL_SMTP.permanent_error
THEN
UTL_SMTP.quit (l_mail_conn);
x_return_status := ‘E’;
WHEN OTHERS
THEN
UTL_SMTP.quit (l_mail_conn);
x_return_status := ‘E’;
END;
/

Mustafa Korkmaz

Mustafa Korkmaz

Oracle Applications Developer at Partnera
2005 yılında Dokuz Eylül Üniversitesi Endüstri Mühendisliğinden Mezun
Oldu, 2011 Yılında Ahmet Yesevi Üniversitesi Bilgisayar Mühendisliğinde
Yüksek Lisansını Tamamlandı,2012 Yılında Doğuş Üniversitesinde
Bilgisayar Mühendisliği Doktora Eğitimine Başladı.
10 yılı aşkın bir zamandır Oracle E-Business Suite Uygulama Yazılımı
üzerinde Teknik Danışman Olarak profesyonel kariyerine devam
etmektedir. İlgi alanları Middleware, CI/CD, Oracle Database , PL/SQL , Java , Makine
Öğrenmesi ve Veri Madenciliği alanlarındadır.
2 versiyon Oracle Database ' (10g, 11g) inde OCA(Oracle Certificate Associate)
ve PL/SQL Certificated Professional ünvanları bulunmaktadır.
Mail: mustafakorkmz@gmail.com
Mustafa Korkmaz

İlgili Yazılar



Yorum yapın

*