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

2024-03-10 00:32

本文主要是介绍Oracle 10G中轻松发送email -- UTL_MAIL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.sqlSQL> @$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='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 SENDArgument Name                  Type                    In/Out Default?------------------------------ ----------------------- ------ --------SENDER                         VARCHAR2                INRECIPIENTS                     VARCHAR2                INCC                             VARCHAR2                IN     DEFAULTBCC                            VARCHAR2                IN     DEFAULTSUBJECT                        VARCHAR2                IN     DEFAULTMESSAGE                        VARCHAR2                IN     DEFAULTMIME_TYPE                      VARCHAR2                IN     DEFAULTPRIORITY                       BINARY_INTEGER          IN     DEFAULT
PROCEDURE SEND_ATTACH_RAWArgument Name                  Type                    In/Out Default?------------------------------ ----------------------- ------ --------SENDER                         VARCHAR2                INRECIPIENTS                     VARCHAR2                INCC                             VARCHAR2                IN     DEFAULTBCC                            VARCHAR2                IN     DEFAULTSUBJECT                        VARCHAR2                IN     DEFAULTMESSAGE                        VARCHAR2                IN     DEFAULTMIME_TYPE                      VARCHAR2                IN     DEFAULTPRIORITY                       BINARY_INTEGER          IN     DEFAULTATTACHMENT                     RAW                     INATT_INLINE                     BOOLEAN                 IN     DEFAULTATT_MIME_TYPE                  VARCHAR2                IN     DEFAULTATT_FILENAME                   VARCHAR2                IN     DEFAULT
PROCEDURE SEND_ATTACH_VARCHAR2Argument Name                  Type                    In/Out Default?------------------------------ ----------------------- ------ --------SENDER                         VARCHAR2                INRECIPIENTS                     VARCHAR2                INCC                             VARCHAR2                IN     DEFAULTBCC                            VARCHAR2                IN     DEFAULTSUBJECT                        VARCHAR2                IN     DEFAULTMESSAGE                        VARCHAR2                IN     DEFAULTMIME_TYPE                      VARCHAR2                IN     DEFAULTPRIORITY                       BINARY_INTEGER          IN     DEFAULTATTACHMENT                     VARCHAR2                INATT_INLINE                     BOOLEAN                 IN     DEFAULTATT_MIME_TYPE                  VARCHAR2                IN     DEFAULTATT_FILENAME                   VARCHAR2                IN     DEFAULT

创建存放附件的目录.

  create directory export as '/oracle/product/dump_dir';grant read,write on directory export to public;

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

beginutl_mail.send(sender=>'oracle@scmdbserver',recipients=>'ypma@ique.com',subject=>'oracle email test',cc=>'gsun@ique.com,pzhang@ique.com',bcc=>'gsun@ique.com,pzhang@ique.com',message=>'sender ok?');
end;
/

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

DECLAREfHandle utl_file.file_type;vTextOut varchar2(32000);text varchar2(32000);
BEGINfHandle := UTL_FILE.FOPEN('EXPORT','a.log','r');IF UTL_FILE.IS_OPEN(fHandle) THENDBMS_OUTPUT.PUT_LINE('File read open');ELSEDBMS_OUTPUT.PUT_LINE('File read not open');END IF;LOOPbeginUTL_FILE.GET_LINE(fHandle,vTextOut);text:=text||vTextOut;EXCEPTIONWHEN 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',bcc=>'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字节的附件.

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

 

FROM: http://www.validba.net/2009/06/oracle-10g%E4%B8%AD%E8%BD%BB%E6%9D%BE%E5%8F%91%E9%80%81email-%E5%8E%9F%E5%88%9B/

 

Ref: http://hi.baidu.com/javenzhen/blog/item/bed3b74a8f7c63e383025c77.html

这篇关于Oracle 10G中轻松发送email -- UTL_MAIL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792443

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s