UTL_SMTP PACKAGE을 사용하여 E-MAIL을 GENERATE하는 과정
======================================================
PURPOSE
---------
UTL_SMTP package는 Oracle8i Release 2 (8.1.6)이상에서 UTL_TCP package을 이용하여 e-mail 을 PL/SQL에서 generate하는 것이 가능하게 하였다.
Explanation
-----------
UTL_SMTP packag을 사용하기 위해서는 Database에 Java option이 install되어 있어야 하며 TCPConnection class인 $ORACLE_HOME/plsql/jlib/plsql.jar file이 load되어 있어야 한다. 그리고 JAVA_POOL_SIZE는 40M이상을 권장한다.
UTL_SMTP package을 사용하여 E-mail을 generate하는 과정을 살펴보자.
1. SMTP server을 이용하여 connection을 맺는다. (보통 25번 port을 사용한다)
이것은 UTL_SMTP.OPEN_CONNECTION() function call을 통해 가능하다.
Ex) utl_smtp.open_connection(mailhost,25)
2. SMTP server와 UTL_SMTP.HELO() call을 통해 초기화을 한다.
Ex) utl_smtp.helo(mail_conn,mailhost);
3. UTL_SMTP.MAIL()을 이용하여 'From' mail ID 를 지정한다.
Ex) utl_smtp.mail(mail_conn,sender);
4. UTL_SMTP.RCPT()을 이용하여 'To' mail ID 를 지정한다.
Ex) utl_smtp.rcpt(mail_conn,recipient);
5. Body의 message을 정렬시에는 <CR><LF>에 의해 line을 나눌 수 있다.
Ex) CHR(13)||CHR(10)
6. UTL_SMTP.DATA() 응 이용하여 UTL_SMTP buffer로 message을 pass한다.
Ex) utl_smtp.data(mail_conn,message);
7. UTL_SMTP.QUIT()을 call함으로써 SMTP connection을 끝내게 된다.
Ex) utl_smtp.quit(mail_conn);
좀더 자세한 sample은 bulletin : 12130에서 보기로 하고 여기선 간단히 E-mail을 보내는 sample을 보여주기로 한다.
Example
--------
CREATE OR REPLACE PROCEDURE send_email
( sender IN VARCHAR2,
recipient IN VARCHAR2,
message IN VARCHAR2)
AS
mailhost VARCHAR2(100) := 'gmapacsmtp.oraclecorp.com';
mail_conn utl_smtp.connection;
BEGIN
mail_conn :=utl_smtp.open_connection(mailhost,100);
utl_smtp.helo(mail_conn,mailhost);
utl_smtp.mail(mail_conn,sender);
utl_smtp.rcpt(mail_conn,recipient);
utl_smtp.data(mail_conn,message);
utl_smtp.quit(mail_conn);
END;
/
SQL> exec send_email('Oracle','TTT@oracle.com','This sample is education purpose only');
Sample2) 한글 data을 mail로 보낼때는 bulletin : 12130을 자세히 보면
알 수 있듯이 Sample1의 utl_smtp.data(mail_conn,message);
부분을 바꾸어 주어야 한다.
CREATE OR REPLACE PROCEDURE send_email
( sender IN VARCHAR2,
recipient IN VARCHAR2,
message IN VARCHAR2)
AS
mailhost VARCHAR2(100) := 'gmapacsmtp.oraclecorp.com';
mail_conn utl_smtp.connection;
BEGIN
mail_conn :=utl_smtp.open_connection(mailhost,100);
utl_smtp.helo(mail_conn,mailhost);
utl_smtp.mail(mail_conn,sender);
utl_smtp.rcpt(mail_conn,recipient);
-- utl_smtp.data(mail_conn,message);
utl_smtp.open_data(mail_conn);
utl_smtp.write_raw_data(mail_conn, UTL_RAW.CAST_TO_RAW(message));
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
END;
/
SQL> exec send_email('Oracle','TTT@oracle.com','이 샘플은 교육목적입니다.');
Reference Ducumment
---------------------
Korean bulletin : 12130
<Note:106513.1
|