본문 바로가기

Oracle/Oracle 오류기타

oracle 에서 메일보내기

모니터링을 위해서 주기적으로 메일이 발송되도록 하는작업을 함.

(인터넷을 뒤져봐서 되는것과 함께 [한글]처리하는것 포함해서 처리한것)

CREATE OR REPLACE PROCEDURE 프로시저명 (

pSender    VARCHAR2,
pRecipient VARCHAR2,
pSubject   VARCHAR2,
pMessage   CLOB) IS
c UTL_SMTP.CONNECTION;
MSG CLOB;
l_boundary  VARCHAR2(50) := '----=*#abc1234321cba#*=';
E_SQLCODE VARCHAR2(30);
E_SQLMSG VARCHAR2(1000);

BEGIN

c := UTL_SMTP.OPEN_CONNECTION('localhost');
UTL_SMTP.HELO(c, 'localhost');
UTL_SMTP.MAIL(c, pSender);
UTL_SMTP.RCPT(c, pRecipient);
UTL_SMTP.OPEN_DATA(c);

MSG := 'From : ' || '"Sender" <'||pSender||'>' ||UTL_TCP.CRLF;
MSG := MSG||'To' || ': ' || '"Recipient" <'||pRecipient||'>' || UTL_TCP.CRLF;

MSG := MSG||'Subject' || ': ' || pSubject || UTL_TCP.CRLF;

MSG := MSG||'MIME-Version: 1.0' || UTL_TCP.CRLF;

  --MSG := MSG||'Content-Type: multipart/alternative; boundary="'||l_boundary || '"' || UTL_TCP.crlf || UTL_TCP.crlf;
MSG := MSG||'Content-Type: text/html; charset="UTF-8"' ||UTL_TCP.crlf || UTL_TCP.crlf;
MSG := MSG||UTL_TCP.CRLF ||pMessage;

  

UTL_SMTP.WRITE_RAW_DATA(c,UTL_RAW.CAST_TO_RAW(MSG));
UTL_SMTP.CLOSE_DATA(c);
UTL_SMTP.QUIT(c);

EXCEPTION
     WHEN OTHERS THEN         
     UTL_SMTP.QUIT(c);

      

END;

/



네트워크 접근에 관한부분이 smtp 있다고 되는게 아니더라.

아래의 dict 를 조회하면 네트워크 접근 엑세스 정보 확인이 되고.

SELECT HOST
            ,LOWER_PORT      
            ,UPPER_PORT
            ,ACL
            ,ACLID  
   FROM DBA_NETWORK_ACLS;


아래는 네트워크 엑세스 추가할때 쓰는 패키지

BEGIN

DBMS_NETWORK_ACL_ADMIN.assign_acl ( acl => 'acl_scott.xml', host => 'mail.********.nl', lower_port => 25, upper_port => NULL); COMMIT;