參數:p_receiver(多地址逗號分隔)、p_sub(主題)、p_txt(HTML 正文)。
關鍵技術點:
UTL_SMTP 建立 SMTP 連接,支援 AUTH LOGIN 認證(Base64 編碼用戶/密)。multipart/mixed + Boundary 分隔。=?GB2312?B??= 格式編碼。UTL_RAW.CAST_TO_RAW(CONVERT(..., 'ZHS16CGB231280')) 解決亂碼。UTL_TCP.CRLF。CREATE OR REPLACE PROCEDURE bsd_sendemail(
p_receiver VARCHAR2, p_sub VARCHAR2, p_txt VARCHAR2
) IS
-- 郵件服務器配置
p_user VARCHAR2(30) := 'smtp_user';
p_pass VARCHAR2(30) := 'smtp_pwd';
p_sendor VARCHAR2(20) := 'SenderName';
p_server VARCHAR2(20) := 'mail.server.ip';
p_port NUMBER := 25;
p_need_smtp NUMBER := 1; -- 1=需認證
-- 內部變量、輔助過程...
BEGIN
-- 1. 分割收件人地址 → my_address_list 集合
-- 2. 循環調用 p_email 發送單封郵件
-- - UTL_SMTP.OPEN_CONNECTION
-- - HELO, AUTH LOGIN
-- - MAIL FROM, RCPT TO
-- - OPEN_DATA 寫 Headers (From, To, Subject, Content-Type)
-- - 寫 MIME Body (HTML 正文)
-- - CLOSE_DATA, QUIT
END;
/
-- 測試調用
BEGIN
bsd_sendemail('a@test.com,b@test.com', '測試主題', 'HTML 正文
中文內容
');
END;
/
-- 查看 Outlook 收件箱確認送達
該過程已在生產環境驗證,可作為數據庫級告警、報表分發的底層發送組件。