发表于: 2009.06.29 23:13
分类: ORACLE
出处: http://yangtingkun.itpub.net/post/468/486732
---------------------------------------------------------------
Oracle提供了UTL_SMTP包,可以发送EMAIL。
写了一个很简单的小例子:
SQL> DECLARE
2 MAIL_CONN UTL_SMTP.CONNECTION;
3 BEGIN
4 MAIL_CONN := UTL_SMTP.OPEN_CONNECTION('mail.itpub.net', 25);
5 UTL_SMTP.HELO(MAIL_CONN, 'mail.itpub.net');
6 UTL_SMTP.COMMAND(MAIL_CONN, 'AUTH LOGIN');
7 UTL_SMTP.COMMAND(MAIL_CONN,
8 UTL_RAW.CAST_TO_VARCHAR2(
9 UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('yangtingkun@itpub.net'))));
10 UTL_SMTP.COMMAND(MAIL_CONN,
11 UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('password'))));
12 UTL_SMTP.MAIL(MAIL_CONN, 'yangtingkun@itpub.net');
13 UTL_SMTP.RCPT(MAIL_CONN, 'yangtk@cis.com.cn');
14 UTL_SMTP.DATA(MAIL_CONN, 'TEST');
15 UTL_SMTP.QUIT(MAIL_CONN);
16 END;
17 /
PL/SQL 过程已成功完成。
就这么一个简单的不能在简单的过程,居然花了N个小时才搞定。
首先打开一个SMTP连接,输入一个邮件服务器的地址,注意如果邮件服务器地址不正确会出现类似这样的错误:
第 1 行出现错误:
ORA-29278: SMTP 临时性错误: 421 Service not available
ORA-06512: 在 "SYS.UTL_SMTP", line 21
ORA-06512: 在 "SYS.UTL_SMTP", line 97
ORA-06512: 在 "SYS.UTL_SMTP", line 139
ORA-06512: 在 line 4
随后输入的分别是用户名和密码。
其实本来打算用UTL_MAIL包实现发邮件的功能,使用UTL_MAIL包基本上一行代码就可以了,但是现在几乎所有的邮件服务器都要求授权验证,因此只能使用UTL_SMTP包来实现,注意如果用户名、密码出现错误,则会报错:
第 1 行出现错误:
ORA-29279: SMTP 永久性错误: 535 authorization failed (#5.7.0)
ORA-06512: 在 "SYS.UTL_SMTP", line 21
ORA-06512: 在 "SYS.UTL_SMTP", line 99
ORA-06512: 在 "SYS.UTL_SMTP", line 159
ORA-06512: 在 line 8
如果没有将用户名密码进行编码就直接发送,会碰到下面的错误:
第 1 行出现错误:
ORA-29279: SMTP 永久性错误: 501 malformed auth input (#5.5.4)
ORA-06512: 在 "SYS.UTL_SMTP", line 21
ORA-06512: 在 "SYS.UTL_SMTP", line 99
ORA-06512: 在 "SYS.UTL_SMTP", line 159
ORA-06512: 在 line 7
如果没有设置用户名、密码,或者使用UTL_MAIL包连接到需要授权验证的邮件服务器,则会报错如下:
第 1 行出现错误:
ORA-29279: SMTP 永久性错误: 554 auth login first
ORA-06512: 在 "SYS.UTL_SMTP", line 21
ORA-06512: 在 "SYS.UTL_SMTP", line 99
ORA-06512: 在 "SYS.UTL_SMTP", line 241
ORA-06512: 在 "SYS.UTL_MAIL", line 424
ORA-06512: 在 "SYS.UTL_MAIL", line 594
ORA-06512: 在 line 2











