첨부파일 전송

    이번에는 파일을 첨부해 메일을 보내 보자. 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을 사용할 것인지에 대한 판단은 각자의 몫이므로, 두 패키지의 장점과 단점을 파악해 자신의 시스템에 적합한 것을 골라 사용하자.

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