利用UTL_SMTP傳送郵件

yangtingkun發表於2009-06-29

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

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-607846/,如需轉載,請註明出處,否則將追究法律責任。

相關文章