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数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地