用Oracle發郵件

taogchan發表於2013-11-06

點選(此處)摺疊或開啟

  1. CREATE OR REPLACE PROCEDURE send_mail(
  2. p_recipient VARCHAR2, -- 郵件接收人

  3. p_subject VARCHAR2, -- 郵件標題

  4. p_message VARCHAR2-- 郵件正文

  5. )
  6. IS
  7. --下面四個變數請根據實際郵件伺服器進行賦值

  8. v_mailhost VARCHAR2(30) := \'smtp.yeah.net\'; --SMTP伺服器地址

  9. v_user VARCHAR2(30) := \'zhchf_52\'; --登入SMTP伺服器的使用者名稱

  10. v_pass VARCHAR2(20) := \'xxxxxx\'; --登入SMTP伺服器的密碼

  11. v_sender VARCHAR2(50) := \'zhchf_52@yeah.net\'; --傳送者郵箱,一般與 ps_user 對應

  12. v_conn UTL_SMTP.connection; --到郵件伺服器的連線

  13. v_msg varchar2(4000); --郵件內容

  14. BEGIN
  15. v_conn := UTL_SMTP.open_connection(v_mailhost, 25);
  16. UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函式

  17. --否則會報:ORA-29279: SMTP 永久性錯誤: 503 5.5.2 Send hello first.

  18. UTL_SMTP.command(v_conn, \'AUTH LOGIN\'); -- smtp伺服器登入校驗

  19. UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
  20. UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
  21. UTL_SMTP.mail(v_conn, \'||v_sender||\'>\'); --設定發件人

  22. UTL_SMTP.rcpt(v_conn, \'||p_recipient||\'>\'); --設定收件人

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

  24. v_msg :=\'Date:\'|| TO_CHAR(SYSDATE, \'yyyy mm dd hh24:mi:ss\')
  25. || UTL_TCP.CRLF || \'From: \'|| v_sender || \'\'
  26. || UTL_TCP.CRLF || \'To: \' || p_recipient || \'\'
  27. || UTL_TCP.CRLF || \'Subject: \' || p_subject
  28. || UTL_TCP.CRLF || UTL_TCP.CRLF -- 這前面是報頭資訊

  29. || p_message; -- 這個是郵件正文

  30. UTL_SMTP.open_data(v_conn); --開啟流

  31. UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --這樣寫標題和內容都能用中文

  32. UTL_SMTP.close_data(v_conn); --關閉流

  33. UTL_SMTP.quit(v_conn); --關閉連線

  34. EXCEPTION
  35. WHEN OTHERS THEN
  36. DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
  37. DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
  38. END send_mail;

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-775908/,如需轉載,請註明出處,否則將追究法律責任。

相關文章