Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> ORACLE發送郵件,oracle存儲過程發郵件

ORACLE發送郵件,oracle存儲過程發郵件

編輯:關於android開發

ORACLE發送郵件,oracle存儲過程發郵件


--===============================================================================
--發送郵件的主過程---------------------------------------------------------------
--xuyinghuai 20150603------------------------------------------------------------
Procedure send_mail_ (p_From Varchar2, --郵件發送人
p_Fromuser Varchar2, --發件人昵稱
p_Touser Varchar2, --接受人昵稱
p_To Varchar2, --郵件接收人
p_Cc Varchar2, --郵件抄送人
p_Subject Varchar2, --郵件標題
p_Message Varchar2, --郵件內容
p_User Varchar2, --郵件驗證用戶
p_Mailhost VARCHAR2, --郵件的服務地址
p_Psd Varchar2 --郵件驗證密碼
) IS
v_Conn Utl_Smtp.Connection; --到郵件服務器的連接
v_Msg Varchar2(32700); --郵件內容
Psrc Varchar2(4000);
Psrc1 Varchar2(4000);
v_Touser1 VARCHAR2(4000);
v_Touser VARCHAR2(500);
v_To Varchar2(500);
i Number := 1;
j Number := 1;
m Number := 1;
n Number := 1;
str_error VARCHAR2(20000);
BEGIN
v_Touser1 := '';
v_Conn := Utl_Smtp.Open_Connection(p_Mailhost, 25);
Utl_Smtp.Ehlo(v_Conn, p_Mailhost); -- 是用 ehlo() 而不是 helo() 函數 否則會報:ORA-29279: SMTP 永久性錯誤: 503 5.5.2 Send hello first.
Utl_Smtp.Command(v_Conn, 'AUTH LOGIN'); -- smtp服務器登錄校驗
Utl_Smtp.Command(v_Conn, Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(Utl_Raw.Cast_To_Raw(p_User))));
Utl_Smtp.Command(v_Conn, Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(Utl_Raw.Cast_To_Raw(p_Psd ))));
Utl_Smtp.Mail (v_Conn, '<' || p_From || '>'); --設置發件人
-- 設置收件人----------------
Psrc := Rtrim(Ltrim(p_To , ';'), ';') || ';';
Psrc1 := Rtrim(Ltrim(p_Touser, ';'), ';') || ';';

IF Nvl(Instr(Psrc, ';', j), 0)>0 THEN
LOOP
i := Nvl(Instr(Psrc , ';', j), 0);
m := Nvl(Instr(Psrc1, ';', n), 0);
If i > 0 THEN
v_To := Trim(Substr(Psrc , j, i - j));
v_Touser := nvl(Trim(Substr(Psrc1, n, m - n)),'1');
Utl_Smtp.Rcpt(v_Conn, v_To); --設置收件人
IF v_Touser = '1' THEN
v_Touser := trim(SUBSTR(v_To,1,Instr(v_To,'@')-1));
END IF;
IF j = 1 THEN
v_Touser1 := v_Touser1 || v_Touser || '<' || v_To || '>';
ELSE
v_Touser1 := v_Touser1 || ';'|| v_Touser || '<' || v_To || '>';
END IF;
j := i + 1;
n := m + 1;
END IF;
Exit When i = 0;
END LOOP;
ELSE
Utl_Smtp.Rcpt(v_Conn, p_To); --設置收件人
v_Touser1 := v_Touser1 || p_Touser || '<' || p_To || '>';
END IF;
-- 設置抄送人----------------
i := 1;
j := 1;
IF nvl(p_Cc,'aa')<>'aa' THEN
Psrc := Rtrim(Ltrim(p_Cc, ';'), ';')|| ';';
IF Nvl(Instr(Psrc, ';', j), 0)>0 THEN
LOOP
i := Nvl(Instr(Psrc, ';', j), 0);
If i > 0 THEN
v_To := Trim(Substr(Psrc, j, i - j));
j := i + 1;
Utl_Smtp.Rcpt(v_Conn, v_To); --設置抄送人
END IF;
Exit When i = 0;
END LOOP;
ELSE
IF nvl(p_Cc,'1') <> '1' THEN
Utl_Smtp.Rcpt(v_Conn, p_Cc); --設置抄送人
END IF;
END IF;
END IF;
-- 創建要發送的郵件內容 注意報頭信息和郵件正文之間要空一行
v_Msg := 'Date: ' || To_Char(Sysdate, 'dd mon yy hh24:mi:ss') || Utl_Tcp.Crlf ||
'From: ' || p_Fromuser || '<' || p_From || '>' || Utl_Tcp.Crlf ||
'To: ' || v_Touser1 || Utl_Tcp.Crlf ||
'Cc: ' || p_Cc || Utl_Tcp.Crlf ||
'Subject: ' || p_Subject || Utl_Tcp.Crlf ||
Utl_Tcp.Crlf -- 這前面是報頭信息
|| p_Message; -- 這個是郵件正文
Utl_Smtp.Open_Data(v_Conn); --打開流
Utl_Smtp.Write_Raw_Data(v_Conn,Utl_Raw.Cast_To_Raw(Convert('Content-Type:text/html;charset=utf-8' ||
v_Msg, 'ZHS16GBK'))); --這樣寫標題和內容都能用中文
Utl_Smtp.Close_Data(v_Conn); --關閉流
Utl_Smtp.Quit(v_Conn); --關閉連接
Exception
When Others THEN
str_error := Dbms_Utility.Format_Error_Stack || Dbms_Utility.Format_Call_Stack;


Dbms_Output.Put_Line(str_error);
END;

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved