이제 위 내용을 전송하는 익명 블록을 만들어 보자.
입력
DECLARE
vv_host VARCHAR2(30) := 'localhost'; -- SMTP 서버명
vn_port NUMBER := 25; -- 포트번호
vv_domain VARCHAR2(30) := 'hong.com'; -- 도메인명
vv_from VARCHAR2(50) := 'charieh@hong.com'; -- 보내는 주소
vv_to VARCHAR2(50) := 'charieh@hong.com'; -- 받는 주소
c utl_smtp.connection;
vv_html VARCHAR2(200); -- HTML 메시지를 담을 변수
BEGIN
c := UTL_SMTP.OPEN_CONNECTION(vv_host, vn_port);
UTL_SMTP.HELO(c, vv_domain); -- HELO
UTL_SMTP.MAIL(c, vv_from); -- 보내는사람
UTL_SMTP.RCPT(c, vv_to); -- 받는사람
UTL_SMTP.OPEN_DATA(c); -- 메일본문 작성 시작
UTL_SMTP.WRITE_DATA(c,'MIME-Version: 1.0' || UTL_TCP.CRLF ); -- MIME 버전
-- Content-Type: HTML 형식, 한글을 사용하므로 문자셋은 euc-kr
UTL_SMTP.WRITE_DATA(c,'Content-Type: text/html; charset="euc-kr"' || UTL_TCP.CRLF );
UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW('From: ' || '"홍길동" <charieh@hong.com>' || UTL_TCP.CRLF) ); -- 보내는사람
UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW('To: ' || '"홍길동" <charieh@hong.com>' || UTL_TCP.CRLF) ); -- 받는사람
UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW('Subject: HTML 테스트 메일' || UTL_TCP.CRLF) ); -- 제목
UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF ); -- 한 줄 띄우기
-- HTML 본문을 작성
vv_html := '<HEAD>
<TITLE>HTML 테스트</TITLE>
</HEAD>
<BDOY>
<p>이 메일은 <b>HTML</b> <i>버전</i> 으로 </p>
<p>작성된 <strong>메일</strong>입니다. </p>
</BODY>
</HTML>';
-- 메일 본문
UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW(vv_html || UTL_TCP.CRLF) );
UTL_SMTP.CLOSE_DATA(c); -- 메일 본문 작성 종료
UTL_SMTP.QUIT(c); -- 메일 세션 종료
EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line(' Invalid Operation in Mail attempt using UTL_SMTP.');
dbms_output.put_line(sqlerrm);
UTL_SMTP.QUIT(c);
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line(' Temporary e-mail issue - try again');
UTL_SMTP.QUIT(c);
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line(' Permanent Error Encountered.');
dbms_output.put_line(sqlerrm);
UTL_SMTP.QUIT(c);
WHEN OTHERS THEN
dbms_output.put_line(sqlerrm);
UTL_SMTP.QUIT(c);
END;
결과
익명 블록이 완료되었습니다.