Oracle 8i 起提供 UTL_SMTP 低階郵件協定操作,10g 新增 UTL_MAIL 高階封裝,大幅簡化寄信程式碼。
conn := UTL_SMTP.OPEN_CONNECTION('mail.server', 25);
UTL_SMTP.HELO(conn, 'db.server');
UTL_SMTP.MAIL(conn, 'sender@domain');
UTL_SMTP.RCPT(conn, 'rcpt@domain');
UTL_SMTP.DATA(conn, 'Subject: Test\n\nBody text');
UTL_SMTP.QUIT(conn);
UTL_MAIL.SEND(
sender => 'sender@domain',
recipients => 'rcpt1@domain, rcpt2@domain',
cc => 'cc@domain',
bcc => 'bcc@domain',
subject => 'Test',
message => 'Body text',
mime_type => 'text/plain; charset=utf8',
priority => 1); -- 1=High, 3=Normal
UTL_MAIL.SEND_ATTACH_VARCHAR2:文字型附件。UTL_MAIL.SEND_ATTACH_RAW:二進位附件(BLOB/RAW)。@$ORACLE_HOME/rdbms/admin/utlmail.sql 建立套件。SMTP_OUT_SERVER = 'mail.server:25'(指定外發 SMTP 伺服器)。GRANT EXECUTE ON UTL_MAIL TO app_user;預設未安裝,避免濫用;生產環境建議搭配 ACL (DBMS_NETWORK_ACL_ADMIN) 限制可連線的 SMTP 伺服器與使用者。
UTL_MAIL 讓資料庫內建通知功能(排程失敗告警、報表自動寄送、審計異常通知)開發極為輕鬆。