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

利用 UTL_SMTP 從 Oracle 資料庫發送電子郵件完整指南

     編輯:Oracle 資料庫基礎

前言

在 Oracle 10g 及以上版本中,開發人員可以使用較新的 UTL_MAIL 套件簡化郵件發送流程。然而,若系統仍運行於 Oracle 8i 資料庫,但實際維護環境已升級至 10g 或更高版本,仍可沿用經典的 UTL_SMTP 套件完成郵件發送,雖然程式碼較為繁瑣,但相容性極佳,無須強制遷移至 UTL_MAIL。

前置準備

  1. 確認套件安裝:以 SYS 權限登入,查詢 DBA_OBJECTS 確認 UTL_SMTP 與 UTL_TCP 狀態為 VALID。若未安裝,請至 $ORACLE_HOME/rdbms/admin 執行 utlsmtp.sql 與 utltcp.sql。
  2. 取得 SMTP 伺服器資訊:需知企業郵件伺服器的主機名稱或 IP 位址及連接埠(預設 25)。注意:此範例不適用於啟用 SSL/TLS 加密的郵件伺服器(如 Gmail)。

核心程式碼範例

DECLARE
  l_mail_conn  UTL_SMTP.CONNECTION;
  l_smtp_host  VARCHAR2(100) := 'smtp.example.com';
  l_smtp_port  NUMBER := 25;
BEGIN
  -- 開啟連線
  l_mail_conn := UTL_SMTP.OPEN_CONNECTION(l_smtp_host, l_smtp_port);
  -- HELO/EHLO
  UTL_SMTP.HELO(l_mail_conn, l_smtp_host);
  -- 寄件者
  UTL_SMTP.MAIL(l_mail_conn, 'sender@example.com');
  -- 收件者
  UTL_SMTP.RCPT(l_mail_conn, 'recipient@example.com');
  -- 資料段
  UTL_SMTP.OPEN_DATA(l_mail_conn);
  UTL_SMTP.WRITE_DATA(l_mail_conn, 'Subject: 測試郵件' || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(l_mail_conn, 'From: sender@example.com' || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(l_mail_conn, 'To: recipient@example.com' || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(l_mail_conn, UTL_TCP.CRLF || '這是一封來自 Oracle 的測試郵件。' || UTL_TCP.CRLF);
  UTL_SMTP.CLOSE_DATA(l_mail_conn);
  -- 關閉連線
  UTL_SMTP.QUIT(l_mail_conn);
EXCEPTION
  WHEN OTHERS THEN
    UTL_SMTP.QUIT(l_mail_conn);
    RAISE;
END;

關鍵點提醒

  • 郵件內容需手動組裝 MIME 標頭,若需支援 HTML、附件或編碼,程式複雜度將大幅上升。
  • Oracle 10g 仍完整支援 UTL_SMTP,若現有系統穩定運作,無須急於改寫。
  • 若需支援加密連線(SSL/TLS),建議改用 UTL_MAIL 搭配 Oracle Wallet,或透過外部 Java Stored Procedure 呼叫 JavaMail API。

總結

UTL_SMTP 雖屬舊世代 API,但因其輕量、相容性高,至今仍是舊版資料庫或簡單郵件需求的首選。掌握其基本操作流程,有助於在受限環境下快速實現資料庫郵件通知功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved