UTL SMTP
UTL_SMTP#
UTL_SMTP 패키지는 SMTP 서버로 EMAIL을 전송하도록, SMTP 프로토콜을 수행할 수 있다. UTL_SMTP 패키지를 구성하는 프로시저와 함수는 아래의 표와 같이 제공한다.
프로시저 및 함수 | 설명 |
---|---|
OPEN_CONNECTION | TCP 소켓을 생성하여, SMTP 서버에 접속한다. |
HELO | SMTP 프로토콜의 초기화인 HELO domain 명령어를 전송한다. |
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;
/