Oracle – Mail Gönderme Scriptleri /ORA-24247 Ağ Erişim Hatası -ORA-29279 Hatası ve Çözümü

Merhabalar,

Oracle da mail için scriptinizi yazıp çalıştırdığınızda ; (bakınız :)

// proc u oluşturma kısmı

CREATE OR REPLACE PROCEDURE send_mail (p_to IN VARCHAR2,
p_from IN VARCHAR2,
p_subject IN VARCHAR2,
p_text_msg IN VARCHAR2 DEFAULT NULL,
p_html_msg IN VARCHAR2 DEFAULT NULL,
p_smtp_host IN VARCHAR2,
p_smtp_port IN NUMBER DEFAULT 25)
AS
l_mail_conn UTL_SMTP.connection;
l_boundary VARCHAR2(50) := ‘—-=*#abc1234321cba#*=’;
BEGIN
l_mail_conn := UTL_SMTP.open_connection(p_smtp_host, p_smtp_port);
UTL_SMTP.helo(l_mail_conn, p_smtp_host);
UTL_SMTP.mail(l_mail_conn, p_from);
UTL_SMTP.rcpt(l_mail_conn, p_to);

UTL_SMTP.open_data(l_mail_conn);

UTL_SMTP.write_data(l_mail_conn, ‘Date: ‘ || TO_CHAR(SYSDATE, ‘DD-MON-YYYY HH24:MI:SS’) || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘To: ‘ || p_to || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘From: ‘ || p_from || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘Subject: ‘ || p_subject || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘Reply-To: ‘ || p_from || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘MIME-Version: 1.0’ || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘Content-Type: multipart/alternative; boundary=”‘ || l_boundary || ‘”‘ || UTL_TCP.crlf || UTL_TCP.crlf);

IF p_text_msg IS NOT NULL THEN
UTL_SMTP.write_data(l_mail_conn, ‘–‘ || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘Content-Type: text/plain; charset=”iso-8859-1″‘ || UTL_TCP.crlf || UTL_TCP.crlf);

UTL_SMTP.write_data(l_mail_conn, p_text_msg);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;

IF p_html_msg IS NOT NULL THEN
UTL_SMTP.write_data(l_mail_conn, ‘–‘ || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, ‘Content-Type: text/html; charset=”iso-8859-1″‘ || UTL_TCP.crlf || UTL_TCP.crlf);

UTL_SMTP.write_data(l_mail_conn, p_html_msg);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;

UTL_SMTP.write_data(l_mail_conn, ‘–‘ || l_boundary || ‘–‘ || UTL_TCP.crlf);
UTL_SMTP.close_data(l_mail_conn);

UTL_SMTP.quit(l_mail_conn);
END;

//deneme kısmı

DECLARE
l_html VARCHAR2(32767);
BEGIN
l_html := ‘<!doctype html>

##<html>##
##<head>##
##<meta charset=”utf-8″>##
##<title>Test Mesajı</title>##
##</head>##
##<body>##
##<p>P ID Gerçekleşme Tarihine 2 gün kalmistir.</p>##
##<p>Bilginize.</p>##
##<br />##
##<br />##
##<br />##
##<br />##
##<p style=”font-size:12px;”>HAUS INFORMATION TECHNOLOGY</p>##
##</body>##
##</html>’;##
send_mail(p_to => ‘erol.akgul@haus.com.tr’,
p_from => ‘erp@haus.com.tr’,
p_subject => ‘Test Message’,
p_text_msg => ‘This is a test message.’,
p_html_msg => l_html,
p_smtp_host => ‘10.10.50.40’);
END;

ORA-24247: ağ erişimi, erişim kontrol listesi (ACL) tarafından engellendi

diye bir hata alırsanız ilk iş olarak

select host, lower_port, upper_port, acl,ACLID  from dba_network_acls;

Scriptini çalıştırıp boş geldiğini gördüyseniz access control list için aşağıdaki gibi sistem prosedürleri ile acl xml dosyasını oluşturup bir kullanıcıyı buna yetkilendirip,mail için kullanılacak server adresini ve portunu belirtip çalıştırıyoruz.

Create an ACL with one database user in Oracle database

BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => ‘utl_mail_config.xml’,
description => ‘Mail Access Config.’,
principal => ‘SYSTEM’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null
);

Assign an ACL to one or more network hosts

dbms_network_acl_admin.add_privilege (
acl => ‘utl_mail_config.xml’,
principal => ‘SYSTEM’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null
);

Confirm the created ACL is correct

dbms_network_acl_admin.assign_acl (
acl => ‘utl_mail_config.xml’,
host => ‘mail.erol.net’,
lower_port => 587,
upper_port => null
);
END;

Komutlarımızı sistem kullanıcısı ile bağlandığımız worksheet lerde çalıştırıyoruz..

Şimdi tekrar deneme scripti ile mail imizi göndermeyi deniyoruz ;

DECLARE
l_html VARCHAR2(32767);
BEGIN
l_html := ‘<!doctype html>

##<html>##
##<head>##
##<meta charset=”utf-8″>##
##<title>Test Mesajı</title>##
##</head>##
##<body>##
##<p>P ID Gerçekleşme Tarihine 2 gün kalmistir.</p>##
##<p>Bilginize.</p>##
##<br />##
##<br />##
##<br />##
##<br />##
##<p style=”font-size:12px;”>HAUS INFORMATION TECHNOLOGY</p>##
##</body>##
##</html>’;##
send_mail(p_to => ‘erol.akgul@haus.com.tr’,
p_from => ‘erp@haus.com.tr’,
p_subject => ‘Test Message’,
p_text_msg => ‘This is a test message.’,
p_html_msg => l_html,
p_smtp_host => ‘10.10.50.40’);
END;

MESSAGE.PNG

Sonucu ile karşılaşmış oluruz.

Ortamı hazırlarken karşılaştığımız başka bir sorunda;

ORA-29279: SMTP kalıcı hatası: 554 Please use smtp authentication for port (587) 55.55.55.555

ORA-29279: Failure Header with no colon, corrupt headers, set g_smtp_allow_invalid true to permit delivery in oracle

idi. Bunun çözümü içinde username ve password girmemiz gerekiyor..

Ancak ofis365 lerde yaşanan bir sorun nedeniyle çalışmayı Sistem Müdürümüz Ersin Can kendi çalışmasıyla tamamladı. Eğer aynı sorunla karşılaşırsanız size yardımcı olmaktan memnun olacaktır 😀

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s