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;
/
- Write for us sponsored posts - 16 Mayıs 2025
- CameraBag Photo Software 2024.0.0 Download Free For PC - 16 Mayıs 2025
- HTML Görüntüsü için Unicode Dönüşümü - 27 Temmuz 2020
Yazar




