보낸 사람, 받는 사람, 제목도 한글로 작성할 수 있다. 이런 경우 본문 내용 전체를 VARCHAR2 변수에 넣고 UTL_RAW.CAST_TO_RAW로 이 변수를 변환한 다음 WRITE_RAW_DATA 프로시저를 1번만 호출하면 된다.

    입력

        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';  -- 받는 주소
          vv_text    VARCHAR2(300);  -- 본문내용을 담을 변수
    
          c utl_smtp.connection;  -- SMTP 서버 연결 객체
        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); -- 메일본문 작성 시작
    
          vv_text := 'From: ' || '"홍길동" <charieh@hong.com>' || UTL_TCP.CRLF;            -- 보내는사람
          vv_text :=  vv_text || 'To: ' || '"홍길동" <charieh@hong.com>' || UTL_TCP.CRLF;  -- 받는 사람
          vv_text :=  vv_text || 'Subject: 한글제목' || UTL_TCP.CRLF;                         -- 제목
          vv_text :=  vv_text || UTL_TCP.CRLF;                                            -- 한 줄 띄우기
          vv_text :=  vv_text || '한글 메일 테스트' || UTL_TCP.CRLF;                      -- 메일본문
    
    
          -- 본문 전체를 한번에 RAW 타입으로 변환 후 메일내용 작성
          UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW(vv_text)  );
    
          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;
    

    결과

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

    성공적으로 실행되었다. Outlook에서 메일을 열어보면 모두 한글로 정상적으로 전송된 것을 알 수 있다.

    그림 18-7 본문 전체가 한글로 작성된 메일
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.