Ağu
19
2015
19
2015
SMTP sunucusu üzerinden e-posta göndermek için Oracle veritabanı etkinleştirme
Yazar Elvan Uysal
1 Yorum
1. Oracle paketleri SYS.UTL_SMTP ve SYS.UTL_TCP
Oracle paketleri SYS.UTL_SMTP ve SYS.UTL_TCP Oracle veritabanı üzerinde kullanılabilir ve EXECUTE olup olmadığını kontrol edilebilir.
2. SMTP erişimi kontrolü
$ telnet smtp_server 25
Eğer boş bir ekran veya bir hata görürseniz: “telnet: açılamıyor uzak ana bilgisayara bağlanmak için: Bağlantı reddedildi”, DB sunucusu SMTP sunucusu tarafından kabul edilmez. Bu durumda size SMTP erişimi uygulamak zorunda.
3. SMTP üzerinden Oracle veritabanından e-posta gönderme
create or replace procedure testmail
(fromm varchar2,too varchar2,sub varchar2,body varchar2,port number)
is
objConnection utl_smtp.connection;
vrData varchar2(32000);
BEGIN
objConnection := UTL_smtp.open_connection('<smtp_server>',port);
UTL_smtp.helo(objConnection, '<smtp_server>');
UTL_smtp.mail(objConnection, fromm);
UTL_smtp.rcpt(objConnection, too);
UTL_smtp.open_data(objConnection);
/* ** Sending the header information */
UTL_smtp.write_data(objConnection, 'From: '||fromm || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'To: '||too || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'Subject: ' || sub || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'MIME-Version: ' || '1.0' || UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection, 'Content-Type: ' || 'text/html;');
UTL_smtp.write_data(objConnection, 'Content-Transfer-Encoding: ' || '"8Bit"' ||
UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection,UTL_tcp.CRLF);
UTL_smtp.write_data(objConnection,UTL_tcp.CRLF||'');UTL_smtp.write_data(objConnection,UTL_tcp.CRLF||'');
UTL_smtp.write_data(objConnection,UTL_tcp.CRLF||'<span style="color: red; font-family: Courier New;">'||body||'</span>');
UTL_smtp.write_data(objConnection,UTL_tcp.CRLF||'');UTL_smtp.write_data(objConnection,UTL_tcp.CRLF||'');
UTL_smtp.close_data(objConnection);
UTL_smtp.quit(objConnection);
EXCEPTION
WHEN UTL_smtp.transient_error OR UTL_smtp.permanent_error THEN
UTL_smtp.quit(objConnection);
dbms_output.put_line(sqlerrm);
WHEN OTHERS THEN
UTL_smtp.quit(objConnection);
dbms_output.put_line(sqlerrm);
END testmail;
/
Aşağıdaki gibi bir hata alındığında; Oracle 11g veritabanı ACL etkinleştirin.
ERROR at line 1:
ORA-29278: SMTP transient error: 421 Service not available
ORA-06512: at “SYS.UTL_SMTP”, line 54
ORA-06512: at “SYS.UTL_SMTP”, line 138
ORA-06512: at “SYS.UTL_SMTP”, line 699
ORA-06512: at “me.TESTMAIL”, line 35
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
ORA-29278: SMTP transient error: 421 Service not available
ORA-06512: at “SYS.UTL_SMTP”, line 54
ORA-06512: at “SYS.UTL_SMTP”, line 138
ORA-06512: at “SYS.UTL_SMTP”, line 699
ORA-06512: at “me.TESTMAIL”, line 35
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
Database kullanıcısı için ACL oluşturma;
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'smtp-gate-permissions.xml',
description => 'Permissions for smtp gate',
principal => 'SCOTT',
is_grant => TRUE,
privilege => 'connect'
);
COMMIT;
END;
/
Ana Bilgisayar için ACL Atama
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'smtp-gate-permissions.xml',
host => '<smtp_server>',
lower_port => 25,
upper_port => null);
COMMIT;
END;
/
Oluşturulan ACL doğru olduğunu onaylayın
SELECT host, lower_port, upper_port, acl
FROM dba_network_acls
/
SELECT acl,
principal,
privilege,
is_grant,
TO_CHAR(start_date, 'DD-MON-YYYY HH24:MI') AS start_date,
TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
FROM dba_network_acl_privileges
/
Elvan Uysal
1989 Aydın doğumlu.
2007-2008 Doğu Akdeniz Üniversitesi(EMU) Yabancı Dil Eğitimi aldı.
2013 İstanbul Aydın Üniversitesi-Matematik Bilgisayar Bilimlerinden
mezun oldu. Istanbul Aydın Üniversitesi-Master of Business
Administration(MBA) master programına devam etmektedir.
2013 yılından Beri Oracle e-Business Suite Uygulama Geliştirme
Fonksiyonel ve Teknik Danışman olarak DbOptimize bünyesinde
kariyerine devam etmektedir.
Mail: elvanuysal89@gmail.com
2007-2008 Doğu Akdeniz Üniversitesi(EMU) Yabancı Dil Eğitimi aldı.
2013 İstanbul Aydın Üniversitesi-Matematik Bilgisayar Bilimlerinden
mezun oldu. Istanbul Aydın Üniversitesi-Master of Business
Administration(MBA) master programına devam etmektedir.
2013 yılından Beri Oracle e-Business Suite Uygulama Geliştirme
Fonksiyonel ve Teknik Danışman olarak DbOptimize bünyesinde
kariyerine devam etmektedir.
Mail: elvanuysal89@gmail.com
Latest posts by Elvan Uysal (see all)
- Alacaklar Ödemelerinde Tahsile Verme İşleminin “Başlatılan Onay” Statüsünde Kalması - 29 Ocak 2018
- Alacaklar Muhasebesi Hesaba Mahsup Ödeme Eşleme - 30 Aralık 2017
- Dönemsel Muhasebe “Dönemi Bekleyen İşlemler “Hatası - 23 Kasım 2017
çok başarıolı bir yazı elinize sağlık