Oracle郵件傳送
10G之前,如果要從oracle中傳送email,必須藉助oracle的utl_smtp和utl_tcp功能包,自己包裝一個email傳送程式,然後使用。自從10G後,這個流程將變得非常簡單。因為oracle給我們提供了一個utl_mail包,我們可以直接呼叫傳送email。其實這個包底層也是呼叫了utl_smtp、utl_tcp的相關api。 不過utl_mail只能用於無安全驗證的smtp伺服器。如果smtp伺服器需要安全驗證,只能用utl_smtp來實現。
1、確定是否安裝了utl_mail,如果沒有用下面的語句安裝utl_mail
@%ORACLE_HOME%\rdbms\admin\utlmail.sql
@%ORACLE_HOME%\rdbms\admin\prvtmail.plb
2、設定smtp_out_server引數
10g中oracle新增加了這個引數用來定義smtp伺服器。如果該引數沒有設定,oracle會自動解析db_domain 引數,用域名來實現mail的傳送,沒有db_domain也沒有設定,那麼mail將不會成功傳送。建議設定smtp_out_server引數:
alter system set smtp_out_server = 'smtp.chengmail.cn';
如果要同時設定多個smtp伺服器,可以將各個伺服器用逗號隔開:
alter system set smtp_out_server = 'smtp.chengmail.cn, mail.a.com';
上面的域名也可以用ip來代替,oracle預設會使用25埠來傳送,也可以手動指定具體的埠:
alter system set smtp_out_server = 'smtp.chengmail.cn:25, mail.a.com:25';
3、測試郵件傳送
目前utl_mail提供了三個傳送郵件的過程
PROCEDURE SEND
引數名稱 型別 輸入/輸出預設值?
------------------------------ ----------------------- ------ --------
SENDER VARCHAR2 IN
RECIPIENTS VARCHAR2 IN
CC VARCHAR2 IN DEFAULT
BCC VARCHAR2 IN DEFAULT
SUBJECT VARCHAR2 IN DEFAULT
MESSAGE VARCHAR2 IN DEFAULT
MIME_TYPE VARCHAR2 IN DEFAULT
PRIORITY BINARY_INTEGER IN DEFAULT
REPLYTO VARCHAR2 IN DEFAULT
PROCEDURE SEND_ATTACH_RAW
引數名稱 型別 輸入/輸出預設值?
------------------------------ ----------------------- ------ --------
SENDER VARCHAR2 IN
RECIPIENTS VARCHAR2 IN
CC VARCHAR2 IN DEFAULT
BCC VARCHAR2 IN DEFAULT
SUBJECT VARCHAR2 IN DEFAULT
MESSAGE VARCHAR2 IN DEFAULT
MIME_TYPE VARCHAR2 IN DEFAULT
PRIORITY BINARY_INTEGER IN DEFAULT
ATTACHMENT RAW IN
ATT_INLINE BOOLEAN IN DEFAULT
ATT_MIME_TYPE VARCHAR2 IN DEFAULT
ATT_FILENAME VARCHAR2 IN DEFAULT
REPLYTO VARCHAR2 IN DEFAULT
PROCEDURE SEND_ATTACH_VARCHAR2
引數名稱 型別 輸入/輸出預設值?
------------------------------ ----------------------- ------ --------
SENDER VARCHAR2 IN
RECIPIENTS VARCHAR2 IN
CC VARCHAR2 IN DEFAULT
BCC VARCHAR2 IN DEFAULT
SUBJECT VARCHAR2 IN DEFAULT
MESSAGE VARCHAR2 IN DEFAULT
MIME_TYPE VARCHAR2 IN DEFAULT
PRIORITY BINARY_INTEGER IN DEFAULT
ATTACHMENT VARCHAR2 IN
ATT_INLINE BOOLEAN IN DEFAULT
ATT_MIME_TYPE VARCHAR2 IN DEFAULT
ATT_FILENAME VARCHAR2 IN DEFAULT
REPLYTO VARCHAR2 IN DEFAULT
建立存放附件的目錄:
create directory export as '/oracle/product/dump_dir';
grant read, write on directory export to public;
沒有附件的郵件傳送示例:
begin
utl_mail.send(sender => 'oracle@scmdbserver',
recipients => 'ypma@ique.com',
subject => 'oracle email test',
cc => 'gsun@ique.com, pzhang@ique.com',
message => 'sender ok?');
end;
/
帶附件的郵件傳送(基於文字的附件),如要要傳送二進位制附件,可以使用utl_mail.send_attach_raw過程:
DECLARE
fHandle utl_file.file_type;
vTextOut varchar2(32000);
text varchar2(32000);
BEGIN
fHandle := UTL_FILE.FOPEN('EXPORT', 'a.log', 'r');
IF UTL_FILE.IS_OPEN(fHandle) THEN
DBMS_OUTPUT.PUT_LINE('File read open');
ELSE
DBMS_OUTPUT.PUT_LINE('File read not open');
END IF;
LOOP
begin
UTL_FILE.GET_LINE(fHandle, vTextOut);
text := text||vTextOut;
EXCEPTION
WHEN NO_DATA_FOUND THEN EXIT;
end;
END LOOP;
UTL_FILE.FCLOSE(fHandle);
utl_mail.send_attach_varchar2(sender => 'oracle@scmdbserver',
recipients => 'ypma@ique.com',
subject => 'oracle email test',
cc => 'gsun@ique.com, pzhang@ique.com',
message => 'sender ok?',
attachment => text,
att_filename => 'a.log');
END;
/
oracle在send_attach_varchar2中附件內容用varchar2來儲存,也就是說附件不能大於32k。send_attach_raw不能傳送超過2000位元組的附件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2148502/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 郵件傳送
- 傳送郵件
- 用oracle傳送電子郵件Oracle
- oracle 傳送郵件 實現方法Oracle
- 成功透過ORACLE傳送郵件Oracle
- 用Oracle傳送郵件procedure (zt)Oracle
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- Laravel 傳送郵件Laravel
- PHP傳送郵件PHP
- Django——郵件傳送Django
- java郵件傳送Java
- Laravel傳送郵件Laravel
- gmail傳送郵件AI
- java傳送郵件Java
- Powershell郵件傳送
- thinkphp 郵件傳送PHP
- centos 傳送郵件CentOS
- phpcms傳送郵件PHP
- 郵件的傳送
- 利用Oracle資料庫傳送郵件Oracle資料庫
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- golang傳送郵件(qq郵箱)Golang
- 郵件傳送API整理API
- php windows 傳送郵件PHPWindows
- 定時傳送郵件
- thinkjs 傳送郵件JS
- 使用phpmailer傳送郵件PHPAI
- Ubuntu的郵件傳送Ubuntu
- python傳送郵件Python
- nodejs 傳送郵件NodeJS
- 傳送郵件那些事
- javamail郵件傳送例子JavaAI
- 使用JavaMail傳送郵件JavaAI
- 使用nodemailer傳送郵件AI
- javamail傳送郵件(轉)JavaAI
- 使用oracle job定時傳送email郵件OracleAI
- Oracle 傳送郵件的儲存過程Oracle儲存過程
- 使用python傳送郵件和接收郵件Python