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

Oracle 自动发送邮件存储过程代码详解(二)

     編輯:Oracle 資料庫基礎

核心存储过程:PROCSENDEMAIL

该过程封装了 Oracle UTL_SMTP 与 UTL_TCP 套件,提供生产级邮件发送能力,主要特性如下:

  • 支持多收件人、抄送人(以逗号或分号分隔)
  • 完整支持中文字符集
  • 支持 >32KB 大附件(分块 Base64 编码)
  • 支持多行正文、多附件、文本与二进制附件混合
  • 支持 HTML 格式邮件
  • 支持 SMTP 认证(用户名/密码)

参数说明

参数类型默认值说明
P_TXTVARCHAR2-邮件正文
P_SUBVARCHAR2-邮件主题
P_SENDORVARCHAR2-发件人地址
P_RECEIVERVARCHAR2-收件人,多地址用“,”或“;”分隔
P_SERVERVARCHAR2-SMTP 服务器域名或 IP
P_PORTNUMBER25SMTP 端口
P_NEED_SMTPINT01=需 SMTP 认证,0=不需
P_USERVARCHAR2NULLSMTP 认证用户名
P_PASSVARCHAR2NULLSMTP 认证密码
P_FILENAMEVARCHAR2NULL附件完整路径,多附件用“,”或“;”分隔
P_ENCODEVARCHAR2'bit 7''bit 7'=文本附件,'base64'=二进制附件

关键实现细节

  1. MIME 多部件边界:使用常量 BOUNDARY 构造 multipart/mixed 结构,分隔正文与附件。
  2. 大附件分块传输:以 BFILE 读取文件,每块 672*3=2016 字节,Base64 编码后每行 54 字符,符合 RFC 2045 规范。
  3. 收件人解析:将 P_RECEIVER 以正则拆分为 ADDRESS_LIST 集合,逐一发送 RCPT TO 命令。
  4. SMTP 认证流程:P_NEED_SMTP=1 时发送 AUTH LOGIN,后续传送 Base64 编码的用户名与密码。

调用示例

BEGIN
    PROCSENDEMAIL(
        P_TXT       => '测试正文内容',
        P_SUB       => '测试主题',
        P_SENDOR    => 'sender@example.com',
        P_RECEIVER  => 'recipient1@example.com;recipient2@example.com',
        P_SERVER    => 'smtp.example.com',
        P_PORT      => 25,
        P_NEED_SMTP => 1,
        P_USER      => 'smtp_user',
        P_PASS      => 'smtp_password',
        P_FILENAME  => '/tmp/report.pdf',
        P_ENCODE    => 'base64'
    );
END;
/

注意:文本附件不可使用 Base64 编码,多附件须统一编码格式;生产环境建议将 SMTP 密码加密存储于配置表中。

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