從Oracle 8i開始,這個數據庫就已經能夠通過UTL_SMTP工具包發送電子郵件了。它提供的PL/SQL工具包實現了RFC所定義的簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)。
Oracle 10g加入了一個新的工具包——UTL_MAIL,它免除了先前的工具包所需要的額外工作。它是對現在仍在使用的UTL_SMTP外加的一個層。
為了體會一下UTL_MAIL所帶來的便利,現在就讓我們先看一下以前的處理方法。UTL_SMTP裡的函數會模仿電子郵件會話的步驟。首先,它首先用UTL_SMTP.OPEN_CONNECTION函數連接到電子郵件發送HELO(“hello”)消息建立一個郵件會話。然後UTL_STMP.MAIL會識別發送者的電子郵箱,UTL_SMTP.RCPT會識別接受者,而UTL_SMTP.DATA會發送消息文本。最後進程由UTL_SMTP.QUIT來結束。
通過使用UTL_MAIL,這多個函數被合並成了一個叫做UTL_MAIL.SEND的存儲過程。它的格式是:
UTL_MAIL.SEND (sender, recipIEntlist, cc, bcc, subject,
Message, mime_type, priority)
RecipIEntlist、cc和bcc參數都是用逗號隔開的接受、抄送和密件抄送人員列表。發送者、主題、消息和mime_type參數都是單個項目字段。上述所有內容都被定義為VARCHAR2。最後一個參數priority是一個用來定義消息優先級別的PLS_INTEGER。
這個工具包還帶有兩個處理附件的過程。SEND_ATTACH_RAW和SEND_ATTACH_VARCHAR2過程與SEND類似,但是帶有一個額外的參數,用來發送附件的RAW或者VARCHAR2類型。
注:在默認情況下,處於安全的考慮UTL_MAIL沒有被配置。你必須以SYS的身份連接進行安裝,然後執行$Oracle_HOME/rdbms/admin目錄下的utlmail.sql腳本。此外,你還必須配置一個初始化參數——SMTP_OUT_SERVER,指向一個出站SMTP服務器(和UTL_STMP不同,它沒有在函數參數裡指定,所以必須預定義)。