จุดเด่นที่สำคัญของมัน คือ ทำให้การส่ง email สะดวกและง่ายมากขึ้น จาก version ก่อนที่ใช้ utl_smtp และ utl_tcp ซึ่งการเรียกใช้ค่อนข้างยุ่งยาก
โดยปกติ utl_mail package ยังไม่สามารถใช้งานได้ทันที หลังจากการติดตั้ง oracle database จำเป็นที่จะต้องติดตั้งเพิ่ม โดยมีขั้นตอน ดังต่อไปนี้
- ติดต่อเชื่อมต่อ oracle database ด้วย sys
$ sqlplus sys/manager1@db as sysdba
SQL>@ORACLE_HOME/rdbms/admin/utlmail.sql
SQL>grant execute to test_app;เท่านี้ ก็จะสามารถใช้งาน utl_mail package ได้แล้ว ต่อไปเราจะมาดูรายละเอียดของ utl_mail กัน
ภายใน utl_mail package จะประกอบไปด้วย 3 procedure ดังนี้
1. send ใช้สำหรับส่ง email ทั่วไป โดยไม่ได้มีการแนบไฟล์
utl_mail.send( sender IN VARCHAR2 CHARACTER SET ANY_CS, recipients IN VARCHAR2 CHARACTER SET ANY_CS, cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, message IN VARCHAR2 CHARACTER SET ANY_CS, mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii', priority IN PLS_INTEGER DEFAULT 3);ตัวอย่าง
begin execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';'; UTL_MAIL.send('test1@test.com', 'test2@test.com', null, null, 'Hello Send', 'Hello,How are you?', 'text; charset=us-ascii', null); end;ใีนการอ้างอิง File ใน utl_file package เราจะต้องสร้าง
directory เพื่อ อ้างอิง location หรือ path ดังนี้
SQL>CREATE DIRECTORY d_file_path AS '/file/'; SQL>GRANT READ,WRITE ON DIRECTORY d_file_path TO test_app;
2. send_attach_raw ใช้สำหรับส่ง email ที่มีการแนบไฟล์
utl_mail.send_attach_raw ( sender IN VARCHAR2 CHARACTER SET ANY_CS, recipients IN VARCHAR2 CHARACTER SET ANY_CS, cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL, mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii', priority IN PLS_INTEGER DEFAULT 3, attachment IN RAW, att_inline IN BOOLEAN DEFAULT TRUE, att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain; charset=us-ascii', att_filename IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);ตัวอย่าง
declare
v_file utl_file.file_type;
v_raw_file RAW(32767);
v_file_length NUMBER;
v_block_size NUMBER;
v_exist BOOLEAN;
v_location VARCHAR2(50):='d_file_path';
v_file_name VARCHAR2(50):='test.pdf';
begin
execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';';
utl_file.fgetattr(v_location,v_file_name,v_exist,v_file_length,v_block_size);
v_file:=utl_file.fopen(v_location,v_file_name,'R');
utl_file.get_raw(v_file,v_raw_file,v_file_length);
utl_file.fclose(v_file);
utl_mail.send_attach_raw('test1@test.com',
'test2@test.com',
null,
null,
'Hello Send Attach Raw',
'Hello,How are you?',
'text; charset=us-ascii',
null,
v_raw_file,
FALSE,
'text; charset=us-ascii',
v_file_name);
end;
3. send_attach_varchar2 ใช้สำหรับส่ง email ที่มีการแนบไฟล์ที่เป็น text
utl_mail.send_attach_varchar2(
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain;charset=us-ascii',
priority IN PLS_INTEGER DEFAULT 3,
attachment IN VARCHAR2 CHARACTER SET ANY_CS,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT 'text/plain; charset=us-ascii,
att_filename IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);
ตัวอย่างdeclare v_file utl_file.file_type; v_raw_file RAW(32767); v_file_length NUMBER; v_block_size NUMBER; v_exist BOOLEAN; v_location VARCHAR2(50):='d_file_path'; v_file_name VARCHAR2(50):='test.txt'; begin execute immediate 'ALTER SESSION SET smtp_out_server = 'localhost';'; utl_file.fgetattr(v_location,v_file_name,v_exist,v_file_length,v_block_size); v_file:=utl_file.fopen(v_location,v_file_name,'R'); utl_file.get_raw(v_file,v_raw_file,v_file_length); utl_file.fclose(v_file); utl_mail.send_attach_varchar2('test1@test.com', 'test2@test.com', null, null, 'Hello Send Attach Varchar2', 'Hello,How are you?', 'text; charset=us-ascii', null, v_raw_file, FALSE, 'text; charset=us-ascii', v_file_name); end;
2 comments:
ขอร่วมด้วยนะครับ
หลังจาก run utlmail.sql (สร้าง Package)
ต้องมี @oracle_home/rdbms/admin/prvtmail.plb ด้วยนะครับ
ไม่งั้นจะหา Package Body ไม่ได้
ขอบคุณ คุณyongyot มากครับ ที่มาช่วยแนะนำเพิ่มเติม
Post a Comment