DB (데이터베이스)/Oracle (오라클)

[Oracle] Oracle UTL_SMTP페키지로 메일 전송하기

뜽배 2024. 5. 3. 16:10
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
반응형