첨부파일 전송
이번에는 파일을 첨부해 메일을 보내 보자. UTL_SMTP 예제에서 사용했던 파일과 파일을 읽어 RAW 타입으로 반환하는 fn_get_raw_file 함수를 재사용할 것이다.
입력
DECLARE
vv_directory VARCHAR2(30) := 'SMTP_FILE'; --디렉토리명
vv_filename VARCHAR2(30) := 'ch18_txt_file.txt'; -- 파일명
vf_file_buff RAW(32767); -- 실제 파일을 담을 RAW타입 변수
vv_html VARCHAR2(300);
BEGIN
vv_html := '<HEAD>
<TITLE>HTML 테스트</TITLE>
</HEAD>
<BDOY>
<p>이 메일은 <b>HTML</b> <i>버전</i> 으로 </p>
<p> <strong>UTL_MAIL</strong> 패키지를 사용해 보낸 메일입니다. </p>
</BODY>
</HTML>';
-- 파일 읽어오기
vf_file_buff := fn_get_raw_file(vv_directory, vv_filename);
UTL_MAIL.SEND_ATTACH_RAW (
sender => 'charieh@hong.com',
recipients => 'charieh@hong.com',
cc => null,
bcc => null,
subject => 'UTL_MAIL 파일전송 테스트',
message => vv_html,
mime_type => 'text/html; charset=euc-kr',
priority => 1,
attachment => vf_file_buff,
att_inline => TRUE,
att_mime_type => 'application/octet',
att_filename => vv_filename,
replyto => 'charieh@hong.com');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
END;
결과
익명 블록이 완료되었습니다.
오류 없이 실행되었다. 메일을 확인해 보자.
제대로 전송되었다. 첨부파일을 포함한 메일 전송 역시 UTL_MAIL 패키지를 사용하는 것이 훨씬 쉽다는 점을 느낄 수 있을 것이다. 하지만 UTL_MAIL 패키지의 SEND_ATTACH_RAW 프로시저는 하나의 메일에 1개의 파일만 첨부할 수 있다는 단점이 있다. 이에 반해 UTL_SMTP는 MIME 속성을 추가해 하나의 메일에 여러 개의 파일을 첨부해 전송할 수 있다.
UTL_SMTP는 사용법이 복잡하지만 다양한 기능을 구현할 수 있고, UTL_MAIL은 사용법은 간편하지만 첨부파일에 대한 제약이 존재한다. UTL_SMTP를 사용할 것인지 UTL_MAIL을 사용할 것인지에 대한 판단은 각자의 몫이므로, 두 패키지의 장점과 단점을 파악해 자신의 시스템에 적합한 것을 골라 사용하자.