728x90
반응형
oracle에서는 UTL_SMTP 패키지에서 메일을 전송할 수 있는 기능을 제공한다.
샘플 procedure를 작성해보자
CREATE OR REPLACE PROCEDURE SP_SEND_MAIL_TEST
IS
-- 받는사람, 제목, 메시지
V_TO VARCHAR2(100) := '받는사람 이메일 주소';
V_SUBJECT VARCHAR2(100) := '제목 명';
V_MESSAGE VARCHAR2(100) := '메시지';
-- 연결변수, 메일서버 호스트명, 메일서버 포트번호, 보내는 사람
L_CONNECTION UTL_SMTP.CONNECTION;
L_SMTP_HOSTNAME VARCHAR2(40) := '메일서버 호스트명';
L_SMTP_PORTNUM NUMBER := 25;
L_FROM VARCHAR2(100) := '보내는 사람 이메일 주소';
BEGIN
-- SMTP 서버에 연결, UTL_SMTP 연결 초기화
L_CONNECTION := UTL_SMTP.open_connection(L_SMTP_HOSTNAME, L_SMTP_PORTNUM);
UTL_SMTP.HELO(L_CONNECTION, L_SMTP_HOSTNAME);
-- MAIL로 발신자 설정, RCPT로 수신자 설정
UTL_SMTP.MAIL(L_CONNECTION, L_FROM );
UTL_SMTP.RCPT(L_CONNECTION, V_TO );
-- OPEN으로 이메일 헤더 작성, WRITE_DATA로 발신자,수신자,제목등의 헤더정보 추가
UTL_SMTP.OPEN_DATA(L_CONNECTION);
UTL_SMTP.WRITE_DATA(L_CONNECTION, 'From : ' || L_FROM || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(L_CONNECTION, 'To : ' || V_TO || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(L_CONNECTION, 'Subject : ' || V_SUBJECT || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(L_CONNECTION, UTL_TCP.CRLF);
-- 메일 본문 작성
UTL_SMTP.WRITE_DATA(L_CONNECTION, V_MESSAGE || UTL_TCP.CRLF);
-- 메일 전송 완료 및 연결종료
UTL_SMTP.CLOSE_DATA(L_CONNECTION);
UTL_SMTP.QUIT(L_CONNECTION);
-- 예외처리
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('error sending mail : ' || SQLERRM);
-- 연결종료
UTL_SMTP.QUIT(L_CONNECTION);
END SP_SEND_MAIL_TEST;
이 PROCEDURE가 동작하려면 데이터베이스에 ACL과 메일서버가 설정이 되어 있어야 가능하다.
그리고 OWNER에 acl 권한이 있어야 한다.
만약에 procedure을 작성 완료 후 ora-24247 애러가 뜨면 아래 포스트를 참고하길 바란다.
2024.05.03 - [DB (데이터베이스)/Oracle (오라클)] - [Oracle] ORA-24247 네트워크 엑세스가 ACL(엑세스 제어 목록)에 의해 거부되었습니다.
728x90
반응형
'DB (데이터베이스) > Oracle (오라클)' 카테고리의 다른 글
[Oracle] oracle 실행계획 조회방법 (0) | 2024.05.10 |
---|---|
[Oracle] ORA-24247 네트워크 엑세스가 ACL(엑세스 제어 목록)에 의해 거부되었습니다. (0) | 2024.05.03 |
[Oracle] oracle patition의 high_value기준으로 조회하기 (0) | 2024.05.03 |
[Oracle] oracle cold 백업 방법 (0) | 2024.04.23 |
[Oracle] 리눅스 awk와 grep으로 oracle의 alert log찾기 (0) | 2024.03.19 |