더북(TheBook)

이제 위 내용을 전송하는 익명 블록을 만들어 보자.

입력

    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;

결과

    익명 블록이 완료되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.