资源描述:
《oracle发邮件功能代码编写》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle提供了UTL_SMTP包,可以发送EMAIL。写了一个很简单的小例子:DECLAREMAIL_CONNUTL_SMTP.CONNECTION;BEGINMAIL_CONN:=UTL_SMTP.OPEN_CONNECTION('mail.itpub.net',25);UTL_SMTP.HELO(MAIL_CONN,'mail.itpub.net');UTL_SMTP.COMMAND(MAIL_CONN,'AUTHLOGIN');UTL_SMTP.COMMAND(MAIL_CONN,UTL_RAW.CAST_TO_VARCHAR2(UTL_ENC
2、ODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('yangtingkun@itpub.net'))));UTL_SMTP.COMMAND(MAIL_CONN,UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('password'))));UTL_SMTP.MAIL(MAIL_CONN,'yangtingkun@itpub.net');UTL_SMTP.RCPT(MAIL_CONN,'yangtk@cis.com.cn');UTL_SMTP
3、.DATA(MAIL_CONN,'TEST');UTL_SMTP.QUIT(MAIL_CONN);END;PL/SQL过程已成功完成。就这么一个简单的不能在简单的过程,居然花了N个小时才搞定。首先打开一个SMTP连接,输入一个邮件服务器的地址,注意如果邮件服务器地址不正确会出现类似这样的错误:第1行出现错误:ORA-29278:SMTP临时性错误:421ServicenotavailableORA-06512:在"SYS.UTL_SMTP",line21ORA-06512:在"SYS.UTL_SMTP",line97ORA-06512:在"SYS.UTL
4、_SMTP",line139ORA-06512:在line4随后输入的分别是用户名和密码。其实本来打算用UTL_MAIL包实现发邮件的功能,使用UTL_MAIL包基本上一行代码就可以了,但是现在几乎所有的邮件服务器都要求授权验证,因此只能使用UTL_SMTP包来实现,注意如果用户名、密码出现错误,则会报错:第1行出现错误:ORA-29279:SMTP永久性错误:535authorizationfailed(#5.7.0)ORA-06512:在"SYS.UTL_SMTP",line21ORA-06512:在"SYS.UTL_SMTP",line99ORA-
5、06512:在"SYS.UTL_SMTP",line159ORA-06512:在line8如果没有将用户名密码进行编码就直接发送,会碰到下面的错误:第1行出现错误:ORA-29279:SMTP永久性错误:501malformedauthinput(#5.5.4)ORA-06512:在"SYS.UTL_SMTP",line21ORA-06512:在"SYS.UTL_SMTP",line99ORA-06512:在"SYS.UTL_SMTP",line159ORA-06512:在line7如果没有设置用户名、密码,或者使用UTL_MAIL包连接到需要授权验证的
6、邮件服务器,则会报错如下:第1行出现错误:ORA-29279:SMTP永久性错误:554authloginfirstORA-06512:在"SYS.UTL_SMTP",line21ORA-06512:在"SYS.UTL_SMTP",line99ORA-06512:在"SYS.UTL_SMTP",line241ORA-06512:在"SYS.UTL_MAIL",line424ORA-06512:在"SYS.UTL_MAIL",line594ORA-06512:在line2CREATEORREPLACEPROCEDUREsend_mail(p_recipie
7、ntVARCHAR2,--邮件接收人p_subjectVARCHAR2,--邮件标题p_messageVARCHAR2--邮件正文)IS--下面四个变量请根据实际邮件服务器进行赋值v_mailhostVARCHAR2(30):='mail.itpub.net';--SMTP服务器地址v_userVARCHAR2(30):=username;--登录SMTP服务器的用户名v_passVARCHAR2(20):=password;--登录SMTP服务器的密码v_senderVARCHAR2(50):=email;--发送者邮箱,一般与ps_user对应v_c
8、onnUTL_SMTP.connection;--到邮件服务器的连接v_msgv