10G之前,如果要从Oracle中发送email,必须借助oracle的utl_smtp和utl_tcp功能包,自己包装一个email发送程序,然后使用.自从10G后,这个流程将变得非常简单.因为oracle给我们提供了一个utl_mail包,我们可以直接调用发送email.其实这个包底层也是调用了utl_smtp、utl_tcp的相关api. 不过utl_mail只能用于无安全验证的stmp服务器.如果smtp服务器需要安全验证,只能只用utl_smtp来实现.1、确定是否安装了utl_mail,如果没有用下面的语句安装utl_mail sqlplus sys/
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb2、设置smtp_out_server参数10g中oracle新增加了这个参数, 用来定义smtp服务器.如果该参数没有设置,oracle会自动解析db_domain 参数,用域名来实现mail的发送,没有db_domain也没有设置,那么mail将不会成功发送.建议设置smtp_out_server参数. alter system set smtp_out_server="mail.a.com";如果要同时设置多个smtp服务器,可以将各个服务器用逗号隔开. alter system set smtp_out_server="mail.a.com:25,mail.b.com";上面的域名也可以用ip来代替,oracle默认会使用25端口来发送,也可以手动指定具体的端口. alter system set smtp_out_server="mail.a.com:25,mail.b.com:25";3、测试邮件发送目前utl_mail提供了三个发送邮件的过程. SQL> desc utl_mail
PROCEDURE SEND
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
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
PROCEDURE SEND_ATTACH_RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
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
PROCEDURE SEND_ATTACH_VARCHAR2
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
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创建存放附件的目录. 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@linuxidc.com",
subject=>"oracle email test",
cc=>"gsun@linuxidc.com,pzhang@linuxidc.com",
bcc=>"gsun@linuxidc.com,pzhang@linuxidc.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@linuxidc.com",
subject=>"oracle email test",
cc=>"gsun@linuxidc.com,pzhang@linuxidc.com",
bcc=>"gsun@linuxidc.com,pzhang@linuxidc.com",
message=>"sender ok?",
attachment=>text,
att_filename=>"a.log");END;
/oracle在send_attach_varchar2中附件内容用varchar2来存储,也就是说附件不能大于32k.send_attach_raw不能发送超过2000字节的附件.有关oracle发送mail的信息可以参考,metalink:Doc ID:269375.1 Doc ID:201639.1 FAQ and Known Issues While Using UTL_SMTP and UTL_MAIL Doc:ID 730746.1 其中包含了发送大于32k附件的方法Oracle v$database视图分析Oracle 创建自动增加主键的表相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)