Post

ORACLE UTL_SMTP 패키지 사용 시 ACL 등록

#naver-import

원문: https://blog.naver.com/qoxmfaktmxj/223029053086

UTL_SMTP 패키지 사용하여

메일을 보낼 때에는 이런식으로 만들어서 사용한다.

create or replace PROCEDURE “SENDMAIL” (to_addr in varchar2, subject in varchar2, body in varchar2) IS

crlf varchar2(2):=CHR(13)||CHR(10); mesg varchar2(4000); mailhost varchar2(30):= ‘xxx.xxx.xxx.xxx’;

conn UTL_SMTP.CONNECTION;

BEGIN BEGIN

conn:=UTL_SMTP.OPEN_CONNECTION(mailhost,25);

UTL_SMTP.helo(conn,mailhost); UTL_SMTP.mail(conn,’’);

UTL_SMTP.rcpt(conn, to_addr);

UTL_SMTP.open_data(conn); UTL_SMTP.WRITE_DATA(conn,’MIME-Version: 1.0’ || UTL_TCP.CRLF ); UTL_SMTP.WRITE_DATA(conn,’Content-Type: text/html; charset=“utf-8”’ || UTL_TCP.CRLF ); UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW(‘From: ‘ || ‘HRIS’ || UTL_TCP.CRLF) ); UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW(‘To: ‘ || to_addr || UTL_TCP.CRLF) ); UTL_SMTP.WRITE_DATA(conn, ‘Subject: =?UTF-8?Q?’ || replace(utl_raw.cast_to_varchar2(utl_encode.quoted_printable_encode(utl_raw.cast_to_raw(subject))), ‘=’ || crlf, ‘’) || ‘?=’ || UTL_TCP.crlf); UTL_SMTP.WRITE_DATA(conn, UTL_TCP.CRLF );

mesg := body; UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW(mesg || UTL_TCP.CRLF) ); UTL_SMTP.close_data(conn); UTL_SMTP.quit(conn); END; EXCEPTION WHEN OTHERS THEN UTL_SMTP.close_data(conn); UTL_SMTP.quit(conn);

END SENDMAIL2;

다만 사용하기 전에 네트워크 액세스 목록 등록을 해야 한다.

등록하지 않으면

ORA-24247: 네트워크 액세스가 ACL(엑세스 제어 목록)에 의해 거부되었습니다.

위와 같은 오류 발생한다.

다른 곳에서 데이터 작업을 하여 위 프로시저를 실행할 경우에는

ORA-29277:부적합한 SMTP 작업

오류가 발생하기도 한다.

해당 부분은

ACL을 등록하지 않았을때 발생하며 아래와 같이 등록 작업을 해 주면된다. ACL과 DESCRIPTION은 통일만 한다면 명칭 바꿔도 상관없음

begin

DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(

acl => ‘network_services.xml’

, description => ‘NETWORK ACL’

, principal => ‘계정명(대소문자 구분)’

, is_grant => true

, privilege => ‘connect’

);

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(

acl => ‘network_services.xml’

, principal => ‘계정명(대소문자 구분)’

, is_grant => true

, privilege => ‘resolve’);

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => ‘network_services.xml’, host => ‘*’);

commit;

end;

댓글