程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 執行Oracle發送郵件的正確操作步驟

執行Oracle發送郵件的正確操作步驟

編輯:Oracle數據庫基礎

以下的文章主要是以實例演示的方式來講解如何正確的執行Oracle發送郵件,以下的文章就就是對其實際的操作步驟的講解,如果你對其相關的實際操作有興趣的話,你就可以對以下的文章點擊觀看了。

Linux AS3+Oracle 9.2||10.20.

從Oracle發送郵件:

示例如下:

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

  1. SQL> select * from v$version;  
  2. BANNER  
  3. Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production  
  4. PL/SQL Release 9.2.0.4.0 - Production  
  5. CORE 9.2.0.3.0 Production  
  6. TNS for Linux: Version 9.2.0.4.0 - Production  
  7. NLSRTL Version 9.2.0.4.0 - Production  
  8. SQL> select * from v$version;  
  9. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod  
  10. PL/SQL Release 10.2.0.1.0 - Production  
  11. CORE 10.2.0.1.0 Production  
  12. TNS for Linux: Version 10.2.0.1.0 - Production  
  13. NLSRTL Version 10.2.0.1.0 - Production  

MAIL服務器為WIN2003,WINMAIL

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

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

  1. CREATE OR REPLACE PROCEDURE SEND_MAIL 

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

as_recp in varchar2, --郵件接收者

as_subject in varchar2, --郵件標題

as_msg_body in varchar2) --郵件內容

  1. IS  
  2. ls_mailhost varchar2(30) :'mail server'; -- address or IP  
  3. lc_mail_conn utl_smtp.connection;  
  4. ls_subject varchar2(100);  
  5. ls_msg_body varchar2(20000);  
  6. ls_username varchar2(256) :'usercode';  
  7. ls_passWord varchar2(256) :'passWord';  
  8. BEGIN  
  9. lc_mail_conn :utl_smtp.open_connection(ls_mailhost, 25);  
  10. utl_smtp.helo(lc_mail_conn, ls_mailhost);  
  11. utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');  
  12. utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));  
  13. utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_passWord)));  
  14. ls_subject :'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;  
  15. 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

  1. utl_smtp.open_data(lc_mail_conn);  
  2. ls_msg_body :'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||  
  3. 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不支持中文

  1. utl_smtp.close_data(lc_mail_conn);  
  2. utl_smtp.quit(lc_mail_conn);  
  3. EXCEPTION  
  4. WHEN UTL_SMTP.INVALID_OperaTION THEN  
  5. dbms_output.put_line('invalid Operation');  
  6. WHEN UTL_SMTP.TRANSIENT_ERROR THEN  
  7. dbms_output.put_line('transIEnt error');  
  8. WHEN UTL_SMTP.PERMANENT_ERROR THEN  
  9. dbms_output.put_line('permanent error');  
  10. WHEN OTHERS THEN  
  11. dbms_output.put_line('others');  
  12. end send_mail;  
  13.  

3.執行Oracle發送郵件:

  1. exec send_mail('[email protected]','[email protected]','我我','this is a Oracle test mail'); 

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

  1. CREATE OR REPLACE PACKAGE demo_base64 IS  
  2. -- Base64-encode a pIEce of binary data.  
  3. --  
  4. -- Note that this encode function does not split the encoded text into  
  5. -- multiple lines with no more than 76 bytes each as required by  
  6. -- the MIME standard.  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved