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;
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 😀