首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle PL/SQL 發送 HTML 郵件完整實作:支援多收件人與 SMTP 驗證

     編輯:Oracle 資料庫基礎

需求背景

在資料庫層面直接發送郵件,可用於系統通知、報表分發、異常告警等場景。本文提供一個功能完整的 BSD_SENDEMAIL 預存程序,支援多收件人(以逗號分隔)、HTML 郵件內容、SMTP 認證、Base64 編碼主旨(解決中文亂碼)等企業級需求。

核心程式碼架構

程序包含四大核心子程序:

  • P_SPLITE_STR:解析收件人字串,自動處理分號/逗號、去空格、加上 <> 格式
  • WRITE_DATA:寫入郵件標頭與內容,使用 UTL_RAW.CAST_TO_RAW 配合 CONVERT 處理中文編碼(ZHS16CGB231280)
  • END_BOUNDARY:處理 MIME 多部分郵件邊界結尾
  • P_EMAIL:真正的 SMTP 連線、認證、發送流程

關鍵設定參數

p_user       varchar2(30) := '';        -- SMTP 帳號
p_pass       varchar2(30) := '';        -- SMTP 密碼
p_sendor     varchar2(20) := 'GnIE';    -- 寄件人顯示名稱
p_server     varchar2(20) := 'Mail_Server_IP'; -- SMTP 伺服器 IP
p_port       number := 25;              -- 連接埠
p_need_smtp  number := 0;               -- 是否需認證 (1=是)

MIME 多部分郵件結構

程式採用 multipart/mixed 格式,支援 HTML 內容:

boundary constant varchar2(256) := '-----BYSUK';
first_boundary constant varchar2(256) := '--' || boundary || l_crlf;
last_boundary  constant varchar2(256) := '--' || boundary || '--' || l_crlf;
multipart_mime_type constant varchar2(256) := 'multipart/mixed;boundary="' || boundary || '"';

實測驗證

在 PL/SQL 執行測試,發送耗時極短;Outlook 端即時收到 HTML 格式郵件,中文主旨與內容均正常顯示。

PL/SQL 測試執行畫面 Outlook 收信畫面

擴充建議

  • Oracle 11g 起可改用 UTL_MAIL 或 UTL_SMTP 更高階封裝
  • 加入附件支援:於 MIME 結構中新增 application/octet-stream 部分
  • 整合 ACL(11g+ 網絡存取控制)設定,避免 ORA-24247 錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved