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
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
Ürünleri Uygulama Yazılım Uzmanı 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
Latest posts by Mustafa Korkmaz (see all)
- Log4j CVE-2021-45046 Zafiyeti - 16 Aralık 2021
- Materialized View Verisi Purge ya da Delete (atomic_refresh) - 12 Kasım 2021
- HTML Görüntüsü için Unicode Dönüşümü - 27 Temmuz 2020