千家信息网

Oracle邮件发送

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,10G之前,如果要从oracle中发送email,必须借助oracle的utl_smtp和utl_tcp功能包,自己包装一个email发送程序,然后使用。自从10G后,这个流程将变得非常简单。因为or
千家信息网最后更新 2026年10月31日Oracle邮件发送

10G之前,如果要从oracle中发送email,必须借助oracle的utl_smtp和utl_tcp功能包,自己包装一个email发送程序,然后使用。自从10G后,这个流程将变得非常简单。因为oracle给我们提供了一个utl_mail包,我们可以直接调用发送email。其实这个包底层也是调用了utl_smtp、utl_tcp的相关api。 不过utl_mail只能用于无安全验证的smtp服务器。如果smtp服务器需要安全验证,只能用utl_smtp来实现。

1、确定是否安装了utl_mail,如果没有用下面的语句安装utl_mail

@%ORACLE_HOME%\rdbms\admin\utlmail.sql

@%ORACLE_HOME%\rdbms\admin\prvtmail.plb

2、设置smtp_out_server参数

10g中oracle新增加了这个参数用来定义smtp服务器。如果该参数没有设置,oracle会自动解析db_domain 参数,用域名来实现mail的发送,没有db_domain也没有设置,那么mail将不会成功发送。建议设置smtp_out_server参数:

alter system set smtp_out_server = 'smtp.chengmail.cn';

如果要同时设置多个smtp服务器,可以将各个服务器用逗号隔开:

alter system set smtp_out_server = 'smtp.chengmail.cn, mail.a.com';

上面的域名也可以用ip来代替,oracle默认会使用25端口来发送,也可以手动指定具体的端口:

alter system set smtp_out_server = 'smtp.chengmail.cn:25, mail.a.com:25';

3、测试邮件发送

目前utl_mail提供了三个发送邮件的过程

PROCEDURE SEND

参数名称 类型 输入/输出默认值?

------------------------------ ----------------------- ------ --------

SENDER VARCHAR2 IN

RECIPIENTS VARCHAR2 IN

CC VARCHAR2 IN DEFAULT

BCC VARCHAR2 IN DEFAULT

SUBJECT VARCHAR2 IN DEFAULT

MESSAGE VARCHAR2 IN DEFAULT

MIME_TYPE VARCHAR2 IN DEFAULT

PRIORITY BINARY_INTEGER IN DEFAULT

REPLYTO VARCHAR2 IN DEFAULT

PROCEDURE SEND_ATTACH_RAW

参数名称 类型 输入/输出默认值?

------------------------------ ----------------------- ------ --------

SENDER VARCHAR2 IN

RECIPIENTS VARCHAR2 IN

CC VARCHAR2 IN DEFAULT

BCC VARCHAR2 IN DEFAULT

SUBJECT VARCHAR2 IN DEFAULT

MESSAGE VARCHAR2 IN DEFAULT

MIME_TYPE VARCHAR2 IN DEFAULT

PRIORITY BINARY_INTEGER IN DEFAULT

ATTACHMENT RAW IN

ATT_INLINE BOOLEAN IN DEFAULT

ATT_MIME_TYPE VARCHAR2 IN DEFAULT

ATT_FILENAME VARCHAR2 IN DEFAULT

REPLYTO VARCHAR2 IN DEFAULT

PROCEDURE SEND_ATTACH_VARCHAR2

参数名称 类型 输入/输出默认值?

------------------------------ ----------------------- ------ --------

SENDER VARCHAR2 IN

RECIPIENTS VARCHAR2 IN

CC VARCHAR2 IN DEFAULT

BCC VARCHAR2 IN DEFAULT

SUBJECT VARCHAR2 IN DEFAULT

MESSAGE VARCHAR2 IN DEFAULT

MIME_TYPE VARCHAR2 IN DEFAULT

PRIORITY BINARY_INTEGER IN DEFAULT

ATTACHMENT VARCHAR2 IN

ATT_INLINE BOOLEAN IN DEFAULT

ATT_MIME_TYPE VARCHAR2 IN DEFAULT

ATT_FILENAME VARCHAR2 IN DEFAULT

REPLYTO VARCHAR2 IN DEFAULT

创建存放附件的目录:

create directory export as '/oracle/product/dump_dir';

grant read, write on directory export to public;

没有附件的邮件发送示例:

begin

utl_mail.send(sender => 'oracle@scmdbserver',

recipients => 'ypma@ique.com',

subject => 'oracle email test',

cc => 'gsun@ique.com, pzhang@ique.com',

message => 'sender ok?');

end;

/

带附件的邮件发送(基于文本的附件),如要要发送二进制附件,可以使用utl_mail.send_attach_raw过程:

DECLARE

fHandle utl_file.file_type;

vTextOut varchar2(32000);

text varchar2(32000);

BEGIN

fHandle := UTL_FILE.FOPEN('EXPORT', 'a.log', 'r');

IF UTL_FILE.IS_OPEN(fHandle) THEN

DBMS_OUTPUT.PUT_LINE('File read open');

ELSE

DBMS_OUTPUT.PUT_LINE('File read not open');

END IF;

LOOP

begin

UTL_FILE.GET_LINE(fHandle, vTextOut);

text := text||vTextOut;

EXCEPTION

WHEN NO_DATA_FOUND THEN EXIT;

end;

END LOOP;

UTL_FILE.FCLOSE(fHandle);

utl_mail.send_attach_varchar2(sender => 'oracle@scmdbserver',

recipients => 'ypma@ique.com',

subject => 'oracle email test',

cc => 'gsun@ique.com, pzhang@ique.com',

message => 'sender ok?',

attachment => text,

att_filename => 'a.log');

END;

/

oracle在send_attach_varchar2中附件内容用varchar2来存储,也就是说附件不能大于32k。send_attach_raw不能发送超过2000字节的附件。

参数 附件 服务 邮件 服务器 名称 类型 输入 输出 安全 域名 端口 过程 面的 验证 成功 三个 也就是 也就是说 二进制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网巨头反垄断金融科技 互联网科技资迅 互联网中国科技 北京互联网科技有限公司 互联网的科技创新 世界互联网领先科技成果 奔汉互联网科技 碳银互联网科技有限公司 深圳期待互联网科技 互联网金融科技委员会 互联网科技公司做什么 互联网巨头投资的硬核科技 互联网公司会议桌创意科技软装饰 崇明区互联网教育科技售后服务 乌苏新华互联网科技做什么的 本届互联网博览会上的黑科技 玉溪新华互联网科技好不好 世界互联网领先科技成果获奖 保险科技服务互联网营销体系 美国互联网科技实力 互联网科技会 互联网科技未来 远信互联网科技 互联网科技大会 衡水科技产业互联网平台 须眉科技是互联网公司吗 银川新华互联网科技职业技术培训学校图片 黑云互联网科技有限公司 广州互联网高科技取餐柜 新氧科技和美国互联网有关系吗
0