当前位置:  数据库>oracle

Oracle 10G中轻松发送email -- UTL_MAIL

    来源: 互联网  发布时间:2017-04-04

    本文导语: 10G之前,如果要从Oracle中发送email,必须借助oracle的utl_smtp和utl_tcp功能包,自己包装一个email发送程序,然后使用.自从10G后,这个流程将变得非常简单.因为oracle给我们提供了一个utl_mail包,我们可以直接调用发送email.其实这个包底层也是...

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附件的方法


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3