欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Oracle PL/SQL 實(shí)現(xiàn)發(fā)送電子郵件功能(UTL_MAIL)

 更新時(shí)間:2021年08月10日 09:21:46   作者:不剪發(fā)的Tony老師  
這篇文章主要介紹了Oracle PL/SQL 實(shí)現(xiàn)發(fā)送電子郵件功能,今天主要給大家介紹使用UTL_MAIL實(shí)現(xiàn)發(fā)送電子郵件功能,具體實(shí)例代碼跟隨小編一起看看吧

email

大家好,我是只談技術(shù)不剪發(fā)的 Tony 老師。

我們在開發(fā) Oracle 數(shù)據(jù)庫程序時(shí),如果想要通過 PL/SQL 存儲過程實(shí)現(xiàn)發(fā)送郵件的功能,大概可以使用以下三種方法:

  • 利用 UTL_TCP 程序包基于 TCP 協(xié)議發(fā)送郵件。這種方法比較原始,需要用戶編寫基礎(chǔ)交換代碼。
  • 利用 UTL_SMTP 程序包基于 SMTP 協(xié)議發(fā)送郵件。這種方法比編碼 TCP 操作簡單很多,支持發(fā)送電子郵件的各種操作,因此使用非常廣泛。
  • 利用 UTL_MAIL 程序包發(fā)送郵件。這種方法最簡單,支持常用的郵件功能,不需要了解 SMTP 協(xié)議。

今天我們要介紹的是第 3 種方法,也就是通過 UTL_MAIL 程序包在 PL/SQL 程序中實(shí)現(xiàn)發(fā)送郵件的功能。Oracle 10g 開始提供 UTL_MAIL 程序包。

安裝 UTL_MAIL

默認(rèn)情況下,系統(tǒng)沒有安裝 UTL_MAIL 程序包。因?yàn)樗枰O(shè)置 SMTP_OUT_SERVER 配置參數(shù),同時(shí)還會涉及到一些安全問題。

首先,執(zhí)行以下語句安裝 UTL_MAIL 程序包:

sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb

然后設(shè)置 SMTP_OUT_SERVER 參數(shù):

sqlplus sys/<pwd>
SQL> ALTER SYSTEM SET smtp_out_server='smtp.domain.com' SCOPE=SPFILE;

如果使用 Oracle 10g R1,需要重啟服務(wù),更高版本不需要。

建議在數(shù)據(jù)庫服務(wù)器上設(shè)置一個(gè)郵件轉(zhuǎn)發(fā),而不是直接連接到外部的郵件服務(wù)器。郵件轉(zhuǎn)發(fā)配置非常簡單,設(shè)置一個(gè)引用 SMTP_OUT_SERVER 參數(shù)的 localhost 的配置。任何連接外部郵件服務(wù)器的復(fù)雜配置都隱藏在郵件轉(zhuǎn)發(fā)配置中。

發(fā)送郵件

完成安裝和配置之后,我們可以使用存儲過程 UTL_MAIL.SEND 發(fā)送郵件:

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 3,
   replyto     IN    VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);

這些參數(shù)的作用如下:

  • SENDER:發(fā)送者的郵件地址
  • RECIPIENTS:接收者的郵件地址,多個(gè)地址使用逗號分隔
  • CC:抄送者的郵件地址,多個(gè)地址使用逗號分隔,默認(rèn)為 NULL
  • BCC:密送者的郵件地址,多個(gè)地址使用逗號分隔,默認(rèn)為 NULL
  • SUBJECT:郵件主題,默認(rèn)為 NULL
  • MESSAGE:郵件正文
  • MIME_TYPE:郵件的 MIME 類型,默認(rèn)為 text/plain; charset=us-ascii
  • PRIORITY:郵件優(yōu)先級,1 級最高,5 級最低,默認(rèn)為 3
  • REPLYTO:回復(fù)郵件發(fā)送的目標(biāo)地址,Oracle 11g R2 開始支持該參數(shù)

以下是一個(gè)發(fā)送郵件的簡單示例:

BEGIN
  UTL_MAIL.send(sender     => 'myname@domain.com',
                recipients => 'zhangsan@domain.com,lisi@domain.com',
                cc         => 'wangwu@domain.com',
                bcc        => 'myboss@domain.com',
                subject    => 'UTL_MAIL 測試',
                message    => '郵件正文',
                mime_type  => 'text/plain; charset=UTF-8'); -- 支持中文
END;
/

發(fā)送附件

除了發(fā)送文本郵件之外,UTL_MAIL 程序包還提供了兩個(gè)支持附件的存儲過程:SEND_ATTACH_RAW 以及 SEND_ATTACH_VARCHAR2 。它們分別可以用于發(fā)送 RAW 以及 VARCHAR2 格式的附件。

UTL_MAIL.SEND_ATTACH_RAW (
   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 DEFAULT NULL,
   mime_type        IN    VARCHAR2 DEFAULT CHARACTER SET ANY_CS
                              DEFAULT 'text/plain; charset=us-ascii',
   priority         IN    PLS_INTEGER DEFAULT 3,
   attachment       IN    RAW,
   att_inline       IN    BOOLEAN DEFAULT TRUE,
   att_mime_type    IN    VARCHAR2 CHARACTER SET ANY_CS 
                                           DEFAULT 'text/plain; charset=us-ascii',
   att_filename     IN    VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
   replyto          IN    VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);

UTL_MAIL.SEND_ATTACH_VARCHAR2 (
   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 DEFAULT NULL,
   mime_type         IN    VARCHAR2 CHARACTER SET ANY_CS 
                                           DEFAULT 'text/plain; charset=us-ascii',
   priority          IN    PLS_INTEGER DEFAULT 3,
   attachment        IN    VARCHAR2 CHARACTER SET ANY_CS, ,
   att_inline        IN    BOOLEAN DEFAULT TRUE,
   att_mime_type     IN    VARCHAR2 CHARACTER SET ANY_CS 
                                           DEFAULT 'text/plain; charset=us-ascii',
   att_filename      IN    VARCHAR2CHARACTER SET ANY_CS DEFAULT NULL,
   replyto           IN    VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL);

這兩個(gè)存儲過程比 UTL_MAIL.SEND 支持以下額外的參數(shù):

  • ATTACHMENT:附件內(nèi)容,數(shù)據(jù)類型為 RAW 或者 VARCHAR2
  • ATT_INLINE:指定附件是否在郵件正文中顯式,默認(rèn)為 TRUE
  • ATT_MIME_TYPE:附件的 MIME 類型,默認(rèn)為 ‘a(chǎn)pplication/octet' 或者 ‘text/plain; charset=us-ascii'
  • ATT_FILENAME:附件的文件名,默認(rèn)為 NULL

以下是一個(gè)發(fā)送文本附件的示例:

BEGIN
  UTL_MAIL.send(sender     => 'myname@domain.com',
                recipients => 'zhangsan@domain.com,lisi@domain.com',
                cc         => 'wangwu@domain.com',
                bcc        => 'myboss@domain.com',
                subject    => 'UTL_MAIL 測試',
                message    => '郵件正文',
                mime_type  => 'text/plain; charset=UTF-8', -- 支持中文
                attachment => '附件內(nèi)容',
                att_mime_type => 'text/plain; charset=UTF-8', -- 支持中文
                att_filename => '附件.txt');
END;
/

注意事項(xiàng)

UTL_MAIL 程序包使用調(diào)用者權(quán)限,也就是說使用該程序的用戶需要擁有訪問外部郵件服務(wù)器的權(quán)限。

如果遇到以下錯(cuò)誤,表示缺少相應(yīng)的權(quán)限。

ORA-24247: network access denied by access control list (ACL)

此時(shí)我們可以通過以下語句授予指定用戶(例如 scott)訪問外部服務(wù)器上的 SMPT 服務(wù)權(quán)限:

BEGIN;

DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
  host => 'www.domain.comm',
  ace  =>  xs$ace_type(privilege_list => xs$name_list('smtp'),
                       principal_name => 'scott',
                       principal_type => xs_acl.ptype_db)); 
END;
/

詳細(xì)內(nèi)容可以參考官方文檔

到此這篇關(guān)于如何使用Oracle PL/SQL 實(shí)現(xiàn)發(fā)送電子郵件功能(UTL_MAIL)的文章就介紹到這了,更多相關(guān)Oracle PL/SQL 發(fā)送電子郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • oracle數(shù)據(jù)庫的刪除方法詳解

    oracle數(shù)據(jù)庫的刪除方法詳解

    這篇文章主要介紹了oracle數(shù)據(jù)庫的刪除方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • oracle創(chuàng)建表空間、授權(quán)、創(chuàng)建用戶、導(dǎo)入dmp文件

    oracle創(chuàng)建表空間、授權(quán)、創(chuàng)建用戶、導(dǎo)入dmp文件

    這篇文章主要介紹了oracle創(chuàng)建表空間、授權(quán)、創(chuàng)建用戶、導(dǎo)入dmp文件,需要的朋友可以參考下
    2017-04-04
  • Oracle基礎(chǔ):通過sqlplus執(zhí)行sql語句后的結(jié)果進(jìn)行判斷

    Oracle基礎(chǔ):通過sqlplus執(zhí)行sql語句后的結(jié)果進(jìn)行判斷

    今天小編就為大家分享一篇關(guān)于Oracle基礎(chǔ):通過sqlplus執(zhí)行sql語句后的結(jié)果進(jìn)行判斷,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 修改Oracle監(jiān)聽默認(rèn)端口號1521的方法

    修改Oracle監(jiān)聽默認(rèn)端口號1521的方法

    我們都知道,Oracle的監(jiān)聽默認(rèn)端口是1521,但是如果系統(tǒng)上1521已經(jīng)被占用或業(yè)務(wù)要求不用默認(rèn)端口,又或者是為了安全,這個(gè)時(shí)候我們就需要修改監(jiān)聽的默認(rèn)端口。下面這篇文章主要介紹了修改Oracle監(jiān)聽默認(rèn)端口號1521的方法,需要的朋友可以參考下。
    2017-01-01
  • oracle中的procedure編寫和使用詳解

    oracle中的procedure編寫和使用詳解

    這篇文章主要介紹了oracle中的procedure編寫和使用詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • Oracle數(shù)據(jù)庫對象的使用詳解

    Oracle數(shù)據(jù)庫對象的使用詳解

    這篇文章主要介紹了Oracle數(shù)據(jù)庫對象的使用,文章中涉及到的命令希望大家認(rèn)真學(xué)習(xí),對大家今后的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Oracle存儲過程和自定義函數(shù)詳解

    Oracle存儲過程和自定義函數(shù)詳解

    本篇文章主要介紹了Oracle存儲過程和自定義函數(shù)詳解,有需要的可以了解一下。
    2016-11-11
  • oracle數(shù)據(jù)庫查詢所有表名和注釋等

    oracle數(shù)據(jù)庫查詢所有表名和注釋等

    這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫查詢所有表名和注釋等的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 解決Oracle批量修改問題

    解決Oracle批量修改問題

    這篇文章主要介紹了解決Oracle批量修改問題,需要的朋友可以參考下
    2017-08-08
  • 分享Oracle 11G Client 客戶端安裝步驟(圖文詳解)

    分享Oracle 11G Client 客戶端安裝步驟(圖文詳解)

    這篇文章主要介紹了分享Oracle 11G Client 客戶端安裝步驟(圖文詳解),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12

最新評論