怎么设置oracle smtp_out_server 的这个参数
为什么show permeter 无法看到这个参数

解决方案 »

  1.   

    我们使用Oracle开发时,常常需要在数据库进行某些操作后通过email将有关信息发给某些用户。许多语言都可以写程序发送email,但它不能“即时”发送email。理想的实现方法就是在数据库的触发器中实现发送email,那么如何在数据库中发送email呢?   在Oracle10g出来以前,在数据库发送email有两个方法,一个是使用包Utl_Smtp,可是这个包使用起来太复杂了,另外一个方法是使用JAVA的存储过程,因为Oracle从8i开始内置了JAVA虚拟机,对于熟悉JAVA的人来讲,这很容易用JAVA实现。可是我不会使用JAVA,怎么办?   Oracle比较照顾我们,在新推出的10g版本中提供了一个新的PL/SQL包Utl_Mail,使用这个包发送邮件,就像用foxmail一样方便。使用utl_mai无需了解底层的协议 (SMTP) 特性,这使得它区别于 Oracle8i Database 中引进的 Utl_Smtp。Utl_Mail 使用起来要简单得多,因为它仅支持 Utl_Smtp 提供的功能的一个有限但很常用的子集。   少说废话,快看看怎么使用吧。不过别着急,就如使用foxmail你还得先安装foxmail和配置服务器一样,Utl_Mail在数据库中不是缺省安装的,你可以以SYS身份执行$ORACLE_HOME\rdbms\admin\下的两个文件utlmail.sql和prvtmail.sql来安装包Utl_Mail,然后把这个包的执行权限赋予相应的用户或者角色。此外,你还得设置一个参数:SMTP_OUT_SERVER,这个参数用于指明发送邮件的SMTP服务器地址,这个参数只能在参数文件或者spfile中修改并重启数据库生效。    好了,万事具备,我们来看看Utl_Mail中有哪些好东东。这个包中共有三个过程:SEDN ,SEND_ATTACH_RAW和SEND_ATTACH_VARCHAR2。今天主要看看SEND。SEDN的头说明是UTL_MAIL.SEND (sender IN VARCHAR2 CHARACTER SET ANY_CS,recipients IN VARCHAR2 CHARACTER SET ANY_CS,cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,message IN VARCHAR2 CHARACTER SET ANY_CS,mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=us-ascii',priority IN PLS_INTEGER DEFAULT NULL);参数说明:sender 邮件发送者的地址recipients 收信人地址,以逗号隔开cc 抄送地址,以逗号隔开,缺省为NULLbcc 暗送地址,以逗号隔开,缺省为NULLsubject 字符串的标题, 缺省为NULLmessage消息体.mime_type 消息的mime类型, 缺省为'text/plain;charset=us-ascii'priority 消息优先级, 缺省为NULL 执行一个例子:SQL> exec UTL_MAIL.SEND ('[email protected]' ,'[email protected]' ,null, null ,' message from oracle10g' ,' Send This mail by utl_mail package'); PL/SQL procedure successfully completed.去邮箱里看看吧。