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

相关文章

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.