a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

實例講解如何通過Oracle成功發送郵件

2024-08-29 13:52:20
字體:
來源:轉載
供稿:網友
linux AS3+Oracle 9.2||10.20.1從Oracle成功發送郵件:

示例如下:

具體的測試環境:LINUX AS3 , Oracle 9.0.2.4

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle9i EnterPRise Edition Release 9.2.0.4.0 - Production

PL/SQL Release 9.2.0.4.0 - Production

CORE 9.2.0.3.0 Production

TNS for Linux: Version 9.2.0.4.0 - Production

NLSRTL Version 9.2.0.4.0 - Production

SQL> select * from v$version;

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

MAIL服務器為WIN2003,WINMAIL

1.保證ORACLE服務器到MAIL服務器網絡暢通,25端口打開

2.創建發送郵件的procedure如下:

---------------------------------------

CREATE OR REPLACE PROCEDURE SEND_MAIL

(as_sender in varchar2, --郵件發送者

as_recp in varchar2, --郵件接收者

as_subject in varchar2, --郵件標題

as_msg_body in varchar2) --郵件內容

IS

ls_mailhost varchar2(30) := 'mail server'; -- address or ip

lc_mail_conn utl_smtp.connection;

ls_subject varchar2(100);

ls_msg_body varchar2(20000);

ls_username varchar2(256) := 'usercode';

ls_passWord varchar2(256) := 'password';

BEGIN

lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);

utl_smtp.helo(lc_mail_conn, ls_mailhost);

utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');

utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));

utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_password)));

ls_subject := 'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;

ls_msg_body := as_msg_body;

utl_smtp.mail(lc_mail_conn, '<'||as_sender||'>'); --這里的'<' 一定要寫,不然會出現permanent error

utl_smtp.rcpt(lc_mail_conn, '<'||as_recp||'>');--這里的'<' 一定要寫,不然會出現permanent error

utl_smtp.open_data(lc_mail_conn);

ls_msg_body := 'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||

chr(13) || chr(10) || chr(13) || chr(10) || ls_msg_body;

utl_smtp.write_raw_data(lc_mail_conn, utl_raw.cast_to_raw(ls_msg_body)); --這樣寫subject可以支持中文但body內容不支持中文;

-- utl_smtp.write_data(lc_mail_conn, ls_msg_body); --這樣寫subject不支持中文

utl_smtp.close_data(lc_mail_conn);

utl_smtp.quit(lc_mail_conn);

EXCEPTION

WHEN UTL_SMTP.INVALID_OperaTION THEN

dbms_output.put_line('invalid operation');

WHEN UTL_SMTP.TRANSIENT_ERROR THEN

dbms_output.put_line('transient error');

WHEN UTL_SMTP.PERMANENT_ERROR THEN

dbms_output.put_line('permanent error');

WHEN OTHERS THEN

dbms_output.put_line('others');

end send_mail;

3.執行發送郵件:

exec send_mail('heyu@163.net','admin@163.net','我我','this is a oracle test mail');

注意事項:上面的過程如果在編譯中出現demo_base64.encode must be declared,請大家創建下面的包和包體;

---------------------------------

CREATE OR REPLACE PACKAGE demo_base64 IS

-- Base64-encode a piece of binary data.

--

-- Note that this encode function does not split the encoded text into

-- multiple lines with no more than 76 bytes each as required by

-- the MIME standard.

--

FUNCTION encode(r IN RAW) RETURN VARCHAR2;

END;

------------------------------------

CREATE OR REPLACE PACKAGE BODY demo_base64 IS

TYPE vc2_table IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;

map vc2_table;

-- Initialize the Base64 mapping

PROCEDURE init_map IS

BEGIN

map(0) :='A'; map(1) :='B'; map(2) :='C'; map(3) :='D'; map(4) :='E';

map(5) :='F'; map(6) :='G'; map(7) :='H'; map(8) :='I'; map(9):='J';

map(10):='K'; map(11):='L'; map(12):='M'; map(13):='N'; map(14):='O';

map(15):='P'; map(16):='Q'; map(17):='R'; map(18):='S'; map(19):='T';

map(20):='U'; map(21):='V'; map(22):='W'; map(23):='X'; map(24):='Y';

map(25):='Z'; map(26):='a'; map(27):='b'; map(28):='c'; map(29):='d';

map(30):='e'; map(31):='f'; map(32):='g'; map(33):='h'; map(34):='i';

map(35):='j'; map(36):='k'; map(37):='l'; map(38):='m'; map(39):='n';

map(40):='o'; map(41):='p'; map(42):='q'; map(43):='r'; map(44):='s';

map(45):='t'; map(46):='u'; map(47):='v'; map(48):='w'; map(49):='x';

map(50):='y'; map(51):='z'; map(52):='0'; map(53):='1'; map(54):='2';

map(55):='3'; map(56):='4'; map(57):='5'; map(58):='6'; map(59):='7';

map(60):='8'; map(61):='9'; map(62):='+'; map(63):='/';

END;

FUNCTION encode(r IN RAW) RETURN VARCHAR2 IS

i pls_integer;

x pls_integer;

y pls_integer;

v VARCHAR2(32767);

BEGIN

-- For every 3 bytes, split them into 4 6-bit units and map them to

-- the Base64 characters

i := 1;

WHILE ( i + 2 <= utl_raw.length(r) ) LOOP

x := to_number(utl_raw.substr(r, i, 1), '0X') * 65536 +

to_number(utl_raw.substr(r, i + 1, 1), '0X') * 256 +

to_number(utl_raw.substr(r, i + 2, 1), '0X');

y := floor(x / 262144); v := v || map(y); x := x - y * 262144;

y := floor(x / 4096); v := v || map(y); x := x - y * 4096;

y := floor(x / 64); v := v || map(y); x := x - y * 64;

v := v || map(x);

i := i + 3;

END LOOP;

-- Process the remaining bytes that has fewer than 3 bytes.

IF ( utl_raw.length(r) - i = 0) THEN

x := to_number(utl_raw.substr(r, i, 1), '0X');

y := floor(x / 4); v := v || map(y); x := x - y * 4;

x := x * 16; v := v || map(x);

v := v || '==';

ELSIF ( utl_raw.length(r) - i = 1) THEN

x := to_number(utl_raw.substr(r, i, 1), '0X') * 256 +

to_number(utl_raw.substr(r, i + 1, 1), '0X');

y := floor(x / 1024); v := v || map(y); x := x - y * 1024;

y := floor(x / 16); v := v || map(y); x := x - y * 16;

x := x * 4; v := v || map(x);

v := v || '=';

END IF;

RETURN v;

END;

BEGIN

init_map;

END;

--結束.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线免费中文字幕 | av在线免费观看一区二区 | 日韩一区精品视频 | 免费看的黄色网 | 亚洲视频一区 | 久久蜜臀 | 亚洲一区二区三区在线 | 日韩在线无 | 中文字幕一区二区三区乱码在线 | 中文字幕免费在线 | 色呦呦一区 | 国产96在线观看 | 午夜日韩 | 亚洲婷婷网 | 日韩二三区 | 久久精品在线免费观看 | 一区二区三区在线播放 | 狠狠躁夜夜躁人人爽天天天天97 | 日韩不卡 | 91精品久久久久久综合五月天 | 91国色 | 欧美xxxx片 | 久久99深爱久久99精品 | 日本一级二级三级久久久 | 色九九九 | 爱爱视频免费 | 久久久久久免费毛片精品 | 成人在线看片网站 | 日韩免费精品 | 国产亚洲精品久 | 男女网站在线观看 | 午夜精品美女久久久久av福利 | 亚洲欧美在线播放 | 久久99精品国产自在现线 | 亚洲清色| 欧美a∨一区二区三区久久黄 | 色五月情 | 激情999 | 国产精品无码专区在线观看 | 久久久亚洲一区 | 国产极品视频在线观看 |