怎样从Oracle8i中直接发送电子邮件

文章作者 100test 发表时间 2007:03:14 13:40:50
来源 100Test.Com百考试题网


由于Oracle不提供用于实时输出消息的工具, Oracle数据库开发者总是要面临实时监视他们的储备过程执行的挑战。他们必须使用dbms_output.put_line调用,这个调用直到过程完成才返回结果。

在本文中,我想演示如何从Oracle 8i数据库直接发送电子邮件,作为一种实时通信解决方案。这样我们要监视存储过程就不再需要等待它们完成了,这样的方法还为开发者提供了其他的一些好处:可以在几分钟内调试一些很长的批处理过程,而不需要等几个小时;计算用于指定代码块所需的执行时间。这就需要解决一个问题,我们如何从运行的存储过程中输出消息以便我们可以即时检查它们,即使我们不在办公场所?我们的做法是把所有必需的过程与函数包装在自定义的包中,然后使用Oracle8i UTL_SMTP包直接地从Oracle数据库中发送电子邮件。下面我将详细讲解一些这个过程。

Oracle的UTL_SMTP包

在Oracle8i中引入了UTL_SMTP包(SMTP代表Simple Mail Transfer Protocol简单邮件传送协议,使用TCP端口25在客户机和服务器之间建立通信联络),使开发者能够从数据库发送电子邮件。

只有安装带有Java虚拟机(JVM)的8i或更高的版本才能使用UTL_SMTP。 此外还必须把plsql.jar载入数据库中。否则,当调用UTL_SMTP API来发送电子邮件的时候我们将得到下面的异常:ORA - 29540 : class oracle/plsql/net/TCPConnection does not exist。

默认的$ORACLE_HOME/javavm/install/initjvm.sql脚本(安装了JVM)不运行把plsql.jar载入数据库的initplsj.sql脚本。系统用户或者内部用户可以手工运行$ORACLE_HOME/RDBMS/ADMIN/initplsj.sql脚本以解决这个问题。 如果你没有可用的脚本,你要么可以从Oracle支持那里得到它,要么可以简单地直接使用loadjava载入实用程序plsql.jar:

loadjava -user sys/password@database -resolve plsql/jlib/plsql.jar



UTL_SMTP API:

本文的代码中使用了下列UTL_SMTP包中的API:

OPEN_CONNECTION():打开到简单邮件传送协议服务器的连接。

HELO():执行连接之后建立与简单邮件传送协议服务器初始的收发关系功能,它能识别发送到服务器的“信使”。

MAIL():初始化与服务器的邮件交换,但是事实上不发送消息。

RCPT():识别消息的接受者。为了把一条消息发送到多个接受者,你必须多次调用这个过程。

DATA():指定电子邮件的内容。

QUIT():终止一个SMTP会话并且断开与服务器的连接。

为了利用应用程序编程接口,把下面的调用按照给定的顺序放入程序中:

调用 OPEN_CONNECTION;

调用 HELO;

调用 MAIL;

调用 RCPT for each recipient;

格式化电子邮件的内容然后调用MAIL;

调用 QUIT。

EmailUtils包规范

EmailUtils包包括下列API:

SetSender/GetSender-设置/取得发送者;

SetRecipient/GetRecipient -设置/取得接受者;

SetCcrecipient/GetCcrecipient -设置/取得抄件接受者;

SetMailHost/GetMailHost -设置/取得邮件主机;

SetSubject/GetSubject -设置/取得主题;

Send-发送邮件。

代码1说明了EmailUtils包的规范:

create or replace package EmailUtils as



procedure SetSender(pSender in varchar2).

function GetSender

return varchar2.



procedure SetRecipient(pRecipient in varchar2).

function GetRecipient

return varchar2.



procedure SetCcRecipient(pCcRecipient in varchar2).

function GetCcRecipient

return varchar2.



procedure SetMailHost(pMailHost in varchar2).

function GetMailHost

return varchar2.



procedure SetSubject(pSubject in varchar2).

function GetSubject

return varchar2.

procedure Send(pMessage in varchar2).



procedure Send(pSender in varchar2,

pRecipient in varchar2,

pMailHost in varchar2, 

pCcRecipient in varchar2 := null, 

pSubject in varchar2 := null, 

pMessage in varchar2 := null).



end EmailUtils.

/


相关文章


甲骨文公布第二财季报告成绩可喜
Oracle数据库文件移动的方法和步骤
提高Oracle数据库查询统计速度经验总结
在Oracle9i中定义视图约束
怎样从Oracle8i中直接发送电子邮件
Oracle推出新的许可证模式
影响ORACLE汉字显示的字符集(下)
怎样将Oracle中大量数据快速转移数据
Oracle收购RedHat?咨询师:机会渺茫!
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛