더북(TheBook)

첨부파일 전송

이번에는 파일을 첨부해 메일을 보내 보자. 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;

결과

    익명 블록이 완료되었습니다.

오류 없이 실행되었다. 메일을 확인해 보자.

그림 18-15 UTL_MAIL 패키지로 보낸 첨부파일 메일

제대로 전송되었다. 첨부파일을 포함한 메일 전송 역시 UTL_MAIL 패키지를 사용하는 것이 훨씬 쉽다는 점을 느낄 수 있을 것이다. 하지만 UTL_MAIL 패키지의 SEND_ATTACH_RAW 프로시저는 하나의 메일에 1개의 파일만 첨부할 수 있다는 단점이 있다. 이에 반해 UTL_SMTP는 MIME 속성을 추가해 하나의 메일에 여러 개의 파일을 첨부해 전송할 수 있다.

UTL_SMTP는 사용법이 복잡하지만 다양한 기능을 구현할 수 있고, UTL_MAIL은 사용법은 간편하지만 첨부파일에 대한 제약이 존재한다. UTL_SMTP를 사용할 것인지 UTL_MAIL을 사용할 것인지에 대한 판단은 각자의 몫이므로, 두 패키지의 장점과 단점을 파악해 자신의 시스템에 적합한 것을 골라 사용하자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.