콘텐츠로 이동

UTL SMTP

UTL_SMTP#

UTL_SMTP 패키지는 SMTP 서버로 EMAIL을 전송하도록, SMTP 프로토콜을 수행할 수 있다. UTL_SMTP 패키지를 구성하는 프로시저와 함수는 아래의 표와 같이 제공한다.

프로시저 및 함수 설명
OPEN_CONNECTION TCP 소켓을 생성하여, SMTP 서버에 접속한다.
HELO SMTP 프로토콜의 초기화인 HELO domain 명령어를 전송한다.
MAIL SMTP 프로토콜의 송신자 설정인 MAIL FROM:\명령어를 전송한다.
RCPT SMTP 프로토콜의 수신자 설정인 RCPT TO:\명령어를 전송한다.
OPEN_DATA SMTP 프로토콜의 데이터 전송 시작인 DATA 명령어를 전송한다.
WRITE_DATA SMTP 프로토콜으로 데이터를 전송한다.
WRITE_RAW_DATA SMTP 프로토콜으로 RAW 데이터를 전송한다.
CLOSE_DATA SMTP 프로토콜의 데이터 전송 종료인 \ . \를 전송한다.
QUIT SMTP 프로토콜의 QUIT 명령어로 연결을 종료한다.

OPEN_CONNECTION#

TCP 소켓을 생성하고, 입력한 IP와 PORT로 SMTP 서버에 접속한다.

구문#

UTL_SMTP.OPEN_CONNECTION (
  host IN VARCHAR(64),
  port IN INTEGER DEFAULT 25,
  tx_timeout IN INTEGER DEFAULT NULL );

파라미터#

이름 입출력 데이터 타입 설명
host IN VARCHAR(64) SMTP 서버의 IP 주소
port IN INTEGER SMTP 서버의 포트 번호
tx_timeout IN INTEGER 호환성을 위한 파라마터이며, 이 값은 무시된다.

결과값#

성공적으로 수행할 경우, CONNECT_TYPE인 접속 핸들을 반환한다.

예외#

수행에 실패하는 경우, CONNECT_TYPE은 NULL값으로 반환한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V2 := CLOSE_CONNECT( V1 );
END;
/

HELO#

연결된 SMTP 서버로 HELO domain 명령어를 전송하여, 초기화 핸드 셰이킹를 수행한다.

구문#

UTL_SMTP.HELO (
  c IN OUT CONNECT_TYPE,
  domain IN VARCHAR(64) );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
domain IN VARCHAR(64) 도메인 이름

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. HELO 함수를 호출하기 전에 OPEN_CONNECTION 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V2 := CLOSE_CONNECT( V1 );
END;
/

MAIL#

연결된 SMTP 서버로 MAIL FORM:\ 명령어를 전송하여, 송신자를 지정한다.

구문#

UTL_SMTP.MAIL (
  c IN OUT CONNECT_TYPE,
  sender IN VARCHAR(256),
  parameters IN VARCHAR DEFAULT NULL );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
sender IN VARCHAR(256) 송신자의 주소
parameters IN VARCHAR 호환성을 위한 파라마터이며, 이 값은 무시된다.

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. MAIL 함수를 호출하기 전에 HELO 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, '[email protected]', null );
  V2 := CLOSE_CONNECT( V1 );
END;
/

RCPT#

연결된 SMTP 서버로 RCPT TO:\ 명령어를 전송하여, 수신자를 지정한다.

구문#

UTL_SMTP.RCPT (
  c IN OUT CONNECT_TYPE,
  recipient IN VARCHAR(256),
  parameters IN VARCHAR DEFAULT NULL );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
recipient IN VARCHAR(256) 수신자의 주소
parameters IN VARCHAR 호환성을 위한 파라마터이며, 이 값은 무시된다.

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. RCPT 함수를 호출하기 전에 MAIL 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V2 := CLOSE_CONNECT( V1 );
END;
/

OPEN_DATA#

연결된 SMTP 서버로 DATA 명령어를 전송하여, 데이터 전송을 시작한다.

구문#

UTL_SMTP.DATA (
  c IN OUT CONNECT_TYPE,
  body IN VARCHAR DEFAULT NULL );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
body IN VARCHAR 호환성을 위한 파라마터이며, 이 값은 무시된다.

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. DATA 함수를 호출하기 전에 RCPT 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.OPEN_DATA( V1, null );
  V2 := CLOSE_CONNECT( V1 );
END;
/

WRITE_DATA#

연결된 SMTP 서버로 데이터 전송을 한다.

구문#

UTL_SMTP.WRITE_DATA (
  c IN OUT CONNECT_TYPE,
  data IN VARCHAR(65534) );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
data IN VARCHAR(65534) 전송할 데이터

결과값#

성공적을 수행할 경우, 전송한 데이터의 길이를 반환한다. 실패하면 -1을 반환한다.

예외#

SMTP 프로토콜 위반 시에 예외가 발생한다. WRITE_DATA 함수를 호출하기 전에 OPEN_DATA 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.OPEN_DATA( V1, null );
  V3 := SMTP.WRITE_DATA( V1, 'test' );
  V2 := CLOSE_CONNECT( V1 );
END;
/

WRITE_RAW_DATA#

연결된 SMTP 서버로 RAW 데이터 전송을 한다.

구문#

UTL_SMTP.WRITE_DATA (
  c IN OUT CONNECT_TYPE,
  data IN RAW(65534) );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들
data IN RAW(65534) 전송할 RAW 데이터

결과값#

성공적을 수행할 경우, 전송한 데이터의 길이를 반환한다. 실패하면 -1을 반환한다.

예외#

SMTP 프로토콜 위반 시에 예외가 발생한다. WRITE_RAW_DATA 함수를 호출하기 전에 OPEN_DATA 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.OPEN_DATA( V1, null );
  V3 := SMTP.WRITE_RAW_DATA( V1, TO_RAW( 'test' ) );
  V2 := CLOSE_CONNECT( V1 );
END;
/

CLOSE_DATA#

연결된 SMTP 서버로 \.\ 명령어를 전송하여, 데이터 전송을 종료한다.

구문#

UTL_SMTP.CLOSE_DATA (
  c IN OUT CONNECT_TYPE );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. CLOSE_DATA 함수를 호출하기 전에 OPEN_DATA 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V2 INTEGER;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.OPEN_DATA( V1, null );
  V3 := SMTP.WRITE_RAW_DATA( V1, TO_RAW( 'test' ) );
  V3 := SMTP.CLOSE_DATA( V1 );
  V2 := CLOSE_CONNECT( V1 );
END;
/

QUIT#

연결된 SMTP 서버로 QUIT 명령어를 전송하여, SMTP 세션과 SMTP 서버와의 연결을 종료한다.

구문#

UTL_SMTP.QUIT (
  c IN OUT CONNECT_TYPE );

파라미터#

이름 입출력 데이터 타입 설명
c IN OUT CONNECT_TYPE SMTP 서버의 접속 핸들

결과값#

SMTP 서버의 응답 코드와 메시지를 포함한 VARCHAR 타입의 결과값을 반환한다. 서버 접속에 실패하는 경우 NULL값으로 반환한다.

예외#

SMTP 서버에서 실패인 응답 코드를 받거나, SMTP 프로토콜 위반 시에 예외가 발생한다. QUIT 함수를 호출하기 전에 OPEN_CONNECTION 함수를 호출해야 한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
  V1 CONNECT_TYPE;
  V3 VARCHAR(65534);
BEGIN
  V1 := SMTP.OPEN_CONNECTION( '127.0.0.1', 25, null );
  V3 := SMTP.HELO( V1, '127.0.0.1', null );
  V3 := SMTP.MAIL( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.RCPT( V1, ['[email protected]](http://nok.altibase.com/mailto:)', null );
  V3 := SMTP.OPEN_DATA( V1, null );
  V3 := SMTP.WRITE_RAW_DATA( V1, TO_RAW( 'test' ) );
  V3 := SMTP.CLOSE_DATA( V1 );
  V3 := SMTP.QUIT( V1 );
END;
/