UTL_SMTP

UTL_SMTP 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.

개요

UTL_SMTP는 SMTP(Simple Mail Transfer Protocol)을 통해 전자 메일 (이메일)을 전송하도록 설계되었습니다. 해당 패키지는 많은 명령들에 대하여 절차 및 기능 인터페이스를 모두 제공합니다. 기능적 형식으로 클라이언트에서 처리할 수 있도록 서버에서 응답을 반환합니다. 절차적 형식으로 먼저 응답을 확인하고 응답이 일시적 또는 영구 오류를 나타내는 경우 예외를 발생시킵니다.

타입

본 절에서는 UTL_SMTP 패키지에서 제공하는 타입들을 설명합니다.

CONNECTION Record Type

SMTP 연결을 나타내는데 사용되는 PL/SQL 레코드 타입입니다.

CONNECTION Record Type 의 세부 내용은 다음과 같습니다.

  • 프로토타입

TYPE connection IS RECORD 
(
      host                 VARCHAR2(255),
      port                 PLS_INTEGER,
      tx_timeout           PLS_INTEGER,
      private_tcp_con      utl_tcp.connection,
      private_state        PLS_INTEGER
);
  • 파라미터

파라미터
설명

host

연결이 설정될 때 원격 호스트로 사용됨

port

연결된 원격 SMTP 서버의 포트 번호

tx_timeout

UTL_SMTP 연결에서 읽기 또는 쓰기 작업이 시간 초과되기 전에 패키지가 대기하는 시간

private_tcp_con

내부 동작에 사용되는 필드이므로 해당 필드를 수정하면 안 됨

private_state

내부 동작에 사용되는 필드이므로 해당 필드를 수정하면 안 됨

REPLY,REPLIES Record Types

SMTP 응답을 나타내는 데 사용되는 PL/SQL 레코드 타입입니다. 각 SMTP 응답은 응답 코드와 텍스트 메시지로 구성됩니다.

REPLY, REPLIES Record Types의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

code

세 자리 응답 코드

text

답장 메시지

프러시저와 함수

본 절에서는 UTL_SMTP 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명합니다.

CLOSE_DATA 프러시저와 함수

해당 서브프로그램은 전자 메일 메시지를 종료합니다. CLOSE_DATA 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP 연결

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 회신이 여러 개인 경우 마지막 회신이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

COMMAND 프러시저와 함수

해당 서브프로그램은 일반 SMTP 명령을 수행합니다.

COMMAND 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP를 연결

cmd

서버에 보낼 SMTP 명령

arg

  • SMTP 인자에 대한 추가적인 인자

  • cmd와 arg사이에는 공백이 들어감

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 회신이 여러 개인 경우 마지막 회신이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

COMMAND_REPLIES 함수

해당 함수는 일반 SMTP 명령을 수행하고 여러 응답을 회수합니다.

COMMAND_REPLIES 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

cmd

서버에 보낼 SMTP 명령

arg

  • SMTP 인자에 대한 추가적인 인자

  • cmd와 arg사이에는 공백이 들어감

  • 반환값

파라미터
설명

replies

  • 명령에 대한 응답

  • 회신이 여러 개인 경우 마지막 회신이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

DATA 프러시저와 함수

해당 서브프로그램은 이메일 메시지의 body 부분에 해당합니다.

DATA 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

body

헤더들을 포함한 보낼 메시지

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 회신이 여러 개인 경우 마지막 회신이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

EHLO 프러시저와 함수

해당 서브프로그램은 EHLO명령을 이용하여, SMTP 서버와 초기 핸드쉐이크를 수행합니다.

EHLO 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

domain

  • 로컬(송신) 호스트의 도매인 이름

  • 식별 목적으로 사용됨

  • 반환값

파라미터
설명

replies

명령에 대한 응답

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

HELO 프러시저와 함수

해당 서브프로그램은 HELO명령을 이용하여, SMTP 서버와 초기 핸드쉐이크를 수행합니다.

HELO 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

domain

  • 로컬(송신) 호스트의 도매인 이름

  • 식별 목적으로 사용됨

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러개 있으면 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

HELP 함수

해당 함수는 HELP 명령을 전송합니다.

HELP 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

command

help 메시지를 받기 위한 명령

  • 반환값

파라미터
설명

replies

명령에 대한 응답

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

MAIL 프러시저와 함수

해당 서브프로그램은 서버와의 메일 트랜잭션을 시작합니다.

MAIL 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

sender

메시지를 보내는 사용자의 이메일 주소

parameters

명령에 대한 추가 매개변수

  • 반환값

파라미터
설명

replies

명령에 대한 응답

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

NOOP 프러시저와 함수

해당 서브프로그램은 NULL 명령을 실행합니다. 서버와 연결이 되어있는지 확인하는 용도로 쓰입니니다.

NOOP 프러시저와 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

OPEN_CONNECTION 함수

해당 함수는 SMTP 서버로 연결하는 함수입니다.

OPEN_CONNECTION 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

host

SMTP 서버 호스트의 이름

port

SMTP 서버가 듣고 있는 포트 번호 (주로 25번)

c

SMTP로 연결

tx_timeout

  • UTL_SMTP 연결에 대하여 읽기 또는 쓰기 작업에서 시간이 초과되기 전에 패키지가 대기하는 시간

  • 읽는 작업에서 즉시 읽을 수 있는 데이터가 없으면 시간이 초과됨

  • 쓰는 작업에서 패키지의 출력 버퍼가 가득 차고 차단되지 않은 데이터가 네트워크로 전송되지 않으면 시간이 초과됨

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

OPEN_DATA 프러시저와 함수

해당 서브프로그램은 WRITE_DATA 및 WRITE_RAW_DATA를 사용하여 메일 메시지를 쓸 수 있도록 명령을 보냅니다.

OPEN_DATA 프러시저와 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

data

헤더를 포함한 메시지

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

QUIT 프러시저와 함수

해당 서브프로그램은 SMTP 세션을 종료하고 서버와의 연결을 끊습니다.

QUIT 프러시저와 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

RCPT 함수

해당 서브프로그램은 전자 메일 메시지의 수신자를 지정합니다.

RCPT 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

recipient

메시지가 전송되는 사용자의 이메일 주소

parameters

RCPT 명령에 대한 추가 매개 변수

파라미터
설명

recipient

메시지가 전송되는 사용자의 이메일 주소

parameters

RCPT 명령에 대한 추가 매개 변수

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

RSET 프러시저와 함수

해당 서브프로그램은 현재 메일 트랜잭션을 종료합니다.

RSET 프러시저와 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

  • 반환값

파라미터
설명

reply

  • 명령에 대한 응답

  • 응답이 여러 개일 경우 마지막 응답이 반환됨

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

VRFY 함수

해당 함수는 대상 이메일 주소의 유효성을 확인합니다.

VRFY 함수 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

recipient

확인할 메일 주소

  • 반환값

파라미터
설명

reply

SMTP 응답을 반환

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

WRITE_DATA 프러시저

해당 프로시저는 전자 메일 메시지를 작성합니다. WRITE_DATA에 대한 반복 호출은 전자 메일 메시지에 데이터를 추가 합니다.

WRITE_DATA 프러시저 의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

data

헤더를 포함한 메시지 텍스트 부분

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

3.17. WRITE_RAW_DATA 프러시저

해당 프로시저는 전자 메일 메시지를 작성합니다. WRITE_RAW_DATA에 대한 반복 호출은 전자 메일 메시지에 데이터를 추가합니다.

WRITE_RAW_DATA 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

c

SMTP로 연결

data

헤더를 포함한 메시지 텍스트 부분

  • 예제

단일 함수 사용의 예가 아니므로, “예제”를 참고합니다.

예제

다음은 OPEN_CONNECTION, HELO, MAIL, RCPT, OPEN_DATA, WRITE_DATA, CLOSE_DATA, QUIT

를 이용하여 SMTP를 수행하는 예시입니다. 25번 포트를 이용하여 SMTP 서버에 연결하고 간단한 문자 메시지를 보냅니다.

두 예제는 서로 독립적인 예제입니다. 하나는 Anonymous Block을 활용하여 동작 흐름을 설명하고, 다른 하나는 프로시저로 구성하여 보다 간단히 작성했습니다.

예제는 참고용이며, 테스트 환경에 따라 호스트, 포트, 발신/수신 메일 주소를 적절히 변경하여 실행하시기 바랍니다.

Last updated