该过程封装了 Oracle UTL_SMTP 与 UTL_TCP 套件,提供生产级邮件发送能力,主要特性如下:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| P_TXT | VARCHAR2 | - | 邮件正文 |
| P_SUB | VARCHAR2 | - | 邮件主题 |
| P_SENDOR | VARCHAR2 | - | 发件人地址 |
| P_RECEIVER | VARCHAR2 | - | 收件人,多地址用“,”或“;”分隔 |
| P_SERVER | VARCHAR2 | - | SMTP 服务器域名或 IP |
| P_PORT | NUMBER | 25 | SMTP 端口 |
| P_NEED_SMTP | INT | 0 | 1=需 SMTP 认证,0=不需 |
| P_USER | VARCHAR2 | NULL | SMTP 认证用户名 |
| P_PASS | VARCHAR2 | NULL | SMTP 认证密码 |
| P_FILENAME | VARCHAR2 | NULL | 附件完整路径,多附件用“,”或“;”分隔 |
| P_ENCODE | VARCHAR2 | 'bit 7' | 'bit 7'=文本附件,'base64'=二进制附件 |
BOUNDARY 构造 multipart/mixed 结构,分隔正文与附件。BFILE 读取文件,每块 672*3=2016 字节,Base64 编码后每行 54 字符,符合 RFC 2045 规范。P_RECEIVER 以正则拆分为 ADDRESS_LIST 集合,逐一发送 RCPT TO 命令。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 密码加密存储于配置表中。