利用Oracle資料庫傳送郵件

2021-07-10 13:02:09 字數 3527 閱讀 9317

create

orreplace

procedure

send_mail(

2p_recipient 

varchar2

, --

郵件接收人

3p_subject   

varchar2

, --

郵件標題

4p_message   

varchar2

--郵件正文5)

6is78

--下面四個變數請根據實際郵件伺服器進行賦值

9v_mailhost  

varchar2(30

) :=

'smtp.***.com

';    

--smtp伺服器位址

10v_user      

varchar2(30

) :=

'user

';           

--登入smtp伺服器的使用者名稱

11v_pass      

varchar2(20

) :=

'pwd

';            

--登入smtp伺服器的密碼

12v_sender    

varchar2(50

) :=

'user@***.com

';    

--傳送者郵箱,一般與 ps_user 對應

1314

v_conn  utl_smtp. connection ; 

--到郵件伺服器的連線

15v_msg 

varchar2

(4000

);  

--郵件內容

1617

begin

1819

v_conn :

=utl_smtp.open_connection(v_mailhost, 

25);

20utl_smtp.ehlo(v_conn, v_mailhost); 

--是用 ehlo() 而不是 helo() 函式

21--

否則會報:ora-29279: smtp 永久性錯誤: 503 5.5.2 send hello first.

2223

utl_smtp.command(v_conn, 

'auth login

');   

--smtp伺服器登入校驗

24utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_user))));

25utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_pass))));

2627

utl_smtp.mail(v_conn, v_sender);     

--設定發件人

28utl_smtp.rcpt(v_conn, p_recipient);  

--設定收件人

2930

--建立要傳送的郵件內容 注意報頭資訊和郵件正文之間要空一行

31v_msg :='

date:'||

to_char(sysdate, 

'dd mon yy hh24:mi:ss')

32||

utl_tcp.crlf ||'

from: '||

'<'||

v_sender ||'

>'33

||utl_tcp.crlf ||'

to: '||

'<'||

p_recipient ||'

>'34

||utl_tcp.crlf ||'

subject: '||

p_subject

35||

utl_tcp.crlf 

||utl_tcp.crlf  

--這前面是報頭資訊

36||

p_message;    

--這個是郵件正文

3738

utl_smtp.open_data(v_conn); 

--開啟流

39utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(v_msg)); 

--這樣寫標題和內容都能用中文

40utl_smtp.close_data(v_conn); 

--關閉流

41utl_smtp.quit(v_conn); 

--關閉連線

4243

exception

4445

when

others 

then

46dbms_output.put_line(dbms_utility.format_error_stack);

47dbms_output.put_line(dbms_utility.format_call_stack);

4849

endsend_mail;

【補充】郵件內容支援html方式如下: 1

utl_smtp.open_data(v_conn); 

--開啟流23

utl_smtp.write_data(v_conn, 

'from:'||

v_sender 

||utl_tcp.crlf); 

4utl_smtp.write_data(v_conn, 

'to:'||

p_recipient 

||utl_tcp.crlf);

5utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(

convert('

subject:'||

p_subject 

||utl_tcp.crlf, 

'zhs16gbk

')));67

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(

convert('

content-type:text/html;charset=gbk'||

utl_tcp.crlf, 

'zhs16gbk

')));

8utl_smtp.write_data(v_conn, utl_tcp.crlf);

9 utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(

convert

(p_message, 

'zhs16gbk

'))); 

--這樣寫標題和內容都能用中文

10utl_smtp.close_data(v_conn); 

--關閉流

11utl_smtp.quit(v_conn); 

--關閉連線

sql Server 資料庫傳送郵件

水晶 create proc 傳送郵件 收件人郵箱 varchar 2000 抄送人郵箱 varchar 2000 asbegin declare table table 投訴號 varchar 2000 預計損失 varchar 20 滯留小時 int,審核人varchar 20 審核狀態 var...

利用jmail類庫傳送郵件

因為微軟提供的傳送郵件類需要你有郵件伺服器,所以只有用jmail類庫 jmail.messageclass ms new jmail.messageclass ms.charset gb2312 ms.contenttype text html ms.isoencodeheaders false m...

apache james 傳送郵件 儲存 資料庫

最近想把所有人的傳送記錄清查一下,所以想把傳送記錄儲存到資料庫中 但上網沒有找到資料,所以自己修改config.xml試了一下 找到將下邊的這種檔案儲存方式注釋 file var mail outgoing 把下邊的資料庫儲存方式的注釋開啟或者新增 file var mail outgoing 這樣...