간단한 메일 전송

    지금까지 배운 내용을 토대로 간단한 메일을 전송해 보자. 아래의 익명 블록을 실행해 보자.

    입력

        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;  -- SMTP 서버 연결 객체
    
    
        BEGIN
          c := UTL_SMTP.OPEN_CONNECTION(vv_host, vn_port);  -- SMPT 서버와 연결
    
          UTL_SMTP.HELO(c, vv_domain); -- HELO
    
          UTL_SMTP.MAIL(c, vv_from);   -- 보내는사람
          UTL_SMTP.RCPT(c, vv_to);     -- 받는사람
    
          UTL_SMTP.OPEN_DATA(c); -- 메일 본문 작성 시작, SMTP의 data 명령어 역할
          -- 각 메시지는 <CR><LF>로 분리한다. 이는 UTL_TCP.CRLF 함수를 이용한다.
          UTL_SMTP.WRITE_DATA(c,'From: ' || '"hong2" <charieh@hong.com>' || UTL_TCP.CRLF ); -- 보내는사람
          UTL_SMTP.WRITE_DATA(c,'To: ' || '"hong1" <charieh@hong.com>' || UTL_TCP.CRLF );   -- 받는사람
          UTL_SMTP.WRITE_DATA(c,'Subject: Test' || UTL_TCP.CRLF );                                                   -- 제목
          UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF );  -- 한 줄 띄우기
          UTL_SMTP.WRITE_DATA(c,'THIS IS SMTP_TEST1 ' || UTL_TCP.CRLF );  -- 본문
    
          UTL_SMTP.CLOSE_DATA(c); -- 메일 본문 작성 종료. SMTP 명령어의 “.” 역할
    
          -- 종료
          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;
    

    결과

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

    위 소스를 보면 SMTP 명령어를 사용해서 직접 메일을 전송했던 것과 별 차이가 없다. SMTP 명령어 자리에 이에 대응되는 UTL_SMTP의 서브 프로그램을 사용했을 뿐이다. 이제 Outlook으로 위 익명 블록을 실행해 전송한 메일을 열어 보자.

    그림 18-4 간편 메일 전송

    오류 없이 제대로 실행되었고 메일도 제대로 전송되었음을 알 수 있다.

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