




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、發(fā)送郵件直接調用這個存儲過程就可以了。參數(shù)的意義里面都有說明。代碼如下:CREATEORREPLACEPROCEDUREPROCSENDEMAIL(P_TXTVARCHAR2,P_SUBVARCHAR2,P_SENDORVARCHAR2,P_RECEIVERVARCHAR2,P_SERVERVARCHAR2,P_PORTNUMBERDEFAULT25,P_NEED_SMTPINTDEFAULT0,P_USERVARCHAR2DEFAULTNULL,P_PASSVARCHAR2DEFAULTNULL,P_FILENAMEVARCHAR2DEFAULTNULL,P_ENCODEVARCHAR2DE
2、FAULTbit7)AUTHIDCURRENT_USERIS/*作用:用oracle發(fā)送郵件主要功能:1、支持多收件人。2、支持中文3、支持抄送人4、支持大于32K的附件5、支持多行正文6、支持多附件7、支持文本附件和二進制附件8、支持HTML格式8、支持作者:suk參數(shù)說明:p_txt:郵件正文p_sub:郵件標題p_SendorAddress:發(fā)送人郵件地址p_ReceiverAddress:接收地址,可以同時發(fā)送到多個地址上,地址之間用,或者”隔開p_EmailServer:郵件服務器地址,可以是域名或者IPp_Port:郵件服務器端口p_need_smtp:是否需要smtp認證,0表示
3、不需要,1表示需要p_user:smtp驗證需要的用戶名p_pass:smtp驗證需要的密碼p_filename:附件名稱,必須包含完整的路徑,如d:tempa.txt可以有多個附件,附件名稱只見用逗號或者分號分隔p_encode:附件編碼轉換格式,其中p_encode=bit7表示文本類型附件p_encode=base64表示二進制類型附件注意:1、對于文本類型的附件,不能用base64的方式發(fā)送,否則出錯2、對于多個附件只能用同一種格式發(fā)送*/L_CRLFVARCHAR2(2):=UTL_TCRLF;L_SENDORADDRESSVARCHAR2(4000);L_SPLITEVARCHAR
4、2(10):=+;CONSTANTVARCHAR2(256):=BYSUK;CONSTANTVARCHAR2(256):=-|BOUNDARY|L_CRLF;CONSTANTVARCHAR2(256):=-|BOUNDARY|-|L_CRLF;MULTIPART_MIME_TYPECONSTANTVARCHAR2(256):=multipart/mixed;boundary=|BOUNDARY|/*以下部分是發(fā)送大二進制附件時用到的變量*/BFILE;NUMBER;NUMBER;NUMBER;UTL_FILE.FILE_TYPE;BINARY_INTEGER:=672*3;/*ensuresp
5、roperformat;PLS_INTEGER:=1;/*pointerforthefile*/NUMBER;_BUFL_DATAL_MAX_LINE_WIDTHL_DIRECTORY_BASE_NAMEVARCHAR2(100):=DIR_FOR_SEND_MAIL;L_LINEVARCHAR2(1000);L_MESGVARCHAR2(32767);/*以上部分是發(fā)送大二進制附件時用到的變量*/TYPEADDRESS_LISTISTABLEOFVARCHAR2(100)INDEXBYBINARY_INTEGER;MY_ADDRESS_LISTADDRESS_LIST;TYPEACCT_LI
6、STISTABLEOFVARCHAR2(100)INDEXBYBINARY_INTEGER;MY_ACCT_LISTACCT_LIST;返回附件源文件所在目錄或者名稱FUNCTIONGET_FILE(P_FILEVARCHAR2,P_GETINT)RETURNVARCHAR2IS-p_get=1表示返回目錄-p_get=2表示返回文件名L_FILEVARCHAR2(1000);BEGINBOUNDARYFIRST_BOUNDARYLAST_BOUNDARYL_FILL_FILE_LENL_MODULOL_PIECESL_FILE_HANDLEL_AMT2016*/L_FILEPOSL_CHUN
7、KSRAW(2100);RAW(2100);NUMBER:=54;IFINSTR(P_FILE,)0THEN-windowsIFP_GET=1THENL_FILE:=SUBSTR(P_FILE,1,INSTR(P_FILE,-1)-1);ELSIFP_GET=2THENL_FILE:=SUBSTR(P_FILE,-(LENGTH(P_FILE)-INSTR(P_FILE,-1);ENDIF;ELSIFINSTR(P_FILE,/)0THEN-linux/unixIFP_GET=1THENL_FILE:=SUBSTR(P_FILE,1,INSTR(P_FILE,/,-1)-1);ELSIFP_G
8、ET=2THENL_FILE:=SUBSTR(P_FILE,-(LENGTH(P_FILE)-INSTR(P_FILE,/,-1);ENDIF;ENDIF;RETURNL_FILE;END;刪除directoryPROCEDUREDROP_DIRECTORY(P_DIRECTORY_NAMEVARCHAR2)ISBEGINEXECUTEIMMEDIAEdropdirectory|P_DIRECTORY_NAME;EXCEPTIONWHENOTHERSTHENNULL;END;創(chuàng)建directoryPROCEDURECREATE_DIRECTORY(P_DIRECTORY_NAMEVARCHAR
9、2,P_DIRVARCHAR2)ISBEGINEXECUTEIMMEDIAEcreatedirectory|P_DIRECTORY_NAME|as|P_DIR|;EXECUTEIMMEDIAEgrantread,writeondirectory|P_DIRECTORY_NAME|topublic;EXCEPTIONWHENOTHERSTHENRAISE;END;分割郵件地址或者附件地址PROCEDUREP_SPLITE_STR(P_STRVARCHAR2,P_SPLITE_FLAGINTDEFAULT1)ISL_ADDRVARCHAR2(254):=;L_LENINT;L_STRVARCHAR
10、2(4000);JINT:=0;-表示郵件地址或者附件的個數(shù)BEGIN/*處理接收郵件地址列表,包括去空格、將;轉換為,等*/L_STR:=TRIM(RTRIM(REPLACE(REPLACE(P_STR,;,),),);L_LEN:=LENGTH(L_STR);FORIIN1.L_LENLOOPIFSUBSTR(L_STR,I,1),THENL_ADDR:=L_ADDR|SUBSTR(L_STR,I,1);ELSEJ:=J+1;IFP_SPLITE_FLAG=1THEN-示處理郵件地址- -前后需要加上,否則很多郵箱將不能發(fā)送郵件L_ADDR:=;- -調用郵件發(fā)送過程MY_ADDRESS_
11、LIST(J):=L_ADDR;ELSIFP_SPLITE_FLAG=2THEN!示處理附件名稱MY_ACCT_LIST(J):=L_ADDR;ENDIF;L_ADDR:=;ENDIF;IFI=L_LENTHENJ:=J+1;IFP_SPLITE_FLAG=1THEN- -調用郵件發(fā)送過程L_ADDR:=;MY_ADDRESS_LIST(J):=L_ADDR;ELSIFP_SPLITE_FLAG=2THENMY_ACCT_LIST(J):=L_ADDR;ENDIF;ENDIF;ENDLOOP;END;寫郵件頭和郵件內容PROCEDUREWRITE_DATA(P_CONNINOUTNOCOPYU
12、TL_SMTPONNECTION,P_NAMEINVARCHAR2,P_VALUEINVARCHAR2,P_SPLITEVARCHAR2DEFAULT:,P_CRLFVARCHAR2DEFAULTL_CRLF)ISBEGIN/*utl_raw.cast_to_raw對解決中文亂碼問題很重要*/UTL_SMTPWRITE_RAW_DATA(P_CONN,UTL_RAW.CAST_TO_RAW(CONVERT(P_NAME|P_SPLITE|P_VALUE|P_CRLF,ZHS16GBK);END;寫MIME郵件尾部PROCEDUREEND_BOUNDARY(CONNINOUTNOCOPYUTL_
13、SMTRNECTION,LASTINBOOLEANDEFAULTFALSE)ISBEGINUTL_SMTPWRITE_DATA(CONN,UTL_TCCRLF);IF(LAST)THENUTL_SMTPWRITE_DATA(CONN,LAST_BOUNDARY);ENDIF;END;發(fā)送附件INOUTNOCOPYUTL_SMTPONNECTIONINVARCHAR2DEFAULTtext/plain,INBOOLEANDEFAULTTRUE,INVARCHAR2DEFAULTt.txt,TRANSFER_ENCINVARCHAR2DEFAULT7bit,DT_NAMEINVARCHAR2DEF
14、AULT0)ISL_FILENAMEVARCHAR2(1000);BEGIN-寫附件頭UTL_SMTPWRITE_DATA(CONN,FIRST_BOUNDARY);- -設置附件格式WRITE_DATA(CONN,Content-Type,MIME_TYPE);- -如果文件名稱非空,表示有附件DROP_DIRECTORY(DT_NAME);一創(chuàng)建directoryCREATE_DIRECTORY(DT_NAME,GET_FILE(FILENAME,1);- -得到附件文件名稱L_FILENAME:=GET_FILE(FILENAME,2);IF(INLINE)THENWRITE_DATA(
15、CONN,Content-Disposition,inline;filename=|L_FILENAME|);ELSEWRITE_DAA(CONN,Content-Disposition,attachment;filename=|L_FILENAME|);ENDIF;- -設置附件的轉換格式IF(TRANSFER_ENCISNOTNULL)THENWRITE_DATA(CONN,Content-Transfer-Encoding,TRANSFER_ENC);PROCEDUREATTACHMENT(CONNMIME_TYPEINLINEFILENAMEENDIF;UTL_SMTPWRITE_DA
16、TA(CONN,UTL_TCCRLF);-begin貼附件內容IFTRANSFER_ENC=bit7THEN-如果是文本類型的附件BEGINL_FILE_HANDLE:=UTL_FILE.FOPEN(DT_NAME,L_FILENAME,r打開文件-把附件分成多份,這本可以發(fā)送超過32K的附件LOOPUTL_FILE.GET_LINE(L_FILE_HANDLE,L_LINE);L_MESG:=L_LINE|L_CRLF;WRITE_DATA(CONN,L_MESG,);ENDLOOP;UTL_FILE.FCLOSE(L_FILE_HANDLE);END_BOUNDARY(CONN);EXCE
17、PTIONWHENOTHERSTHENUTL_FILE.FCLOSE(L_FILE_HANDLE);END_BOUNDARY(CONN);NULL;END;-結束文本類型附件的處理ELSIFTRANSFER_ENC=base64THEN-如果是二進制類型的附件BEGIN-把附件分成多份,這本可以發(fā)送超過32K的附件L_FILEPOS:=1;-重置offset,在發(fā)送多個附件時,必須重置L_FIL:=BFILENAME(DT_NAME,L_FILENAME);L_FILE_LEN:=DBMS_LOB.GETLENGTH(L_FIL);L_MODULO:=MOD(L_FILE_LEN,L_AMT)
18、;L_PIECES:=TRUNC(L_FILE_LEN/L_AMT);IF(L_MODULO0)THENL_PIECES:=L_PIECES+1;ENDIF;DBMS_LOB.FILEOPEN(L_FIL,DBMS_LOB.FILE_READO)NLDBMS_LOB.READ(L_FIL,L_AMT_FILEPOS,L_BUF);L_DATA:=NULL;FORIIN1.L_PIECESLOOPL_FILEPOS:=I*L_AMT+1;L_FILE_LEN:=L_FILE_LEN-L_AMT;L_DATA:=UTL_RAW.CONCAT(L_DATA,L_BUF);L_CHUNKS:=TRUN
19、C(UTL_RAW.LENGTH(L_DATA)/L_MAX_LINE_WIDTH);IF(IL_PIECES)THENL_CHUNKS:=L_CHUNKS-1;ENDIF;UTL_SMTPWRITE_RAW_DATA(CONN,UTL_ENCODE.BASE64_ENCODE(L_DATA);L_DATA:=NULL;IF(L_FILE_LEN0)THENL_AMT:=L_FILE_LEN;ENDIF;DBMS_LOB.READ(L_FIL,L_AMT_FILEPOS,L_BUF);ENDLOOP;DBMS_LOB.FILECLOSE(L_FIL);END_BOUNDARY(CONN);EX
20、CEPTIONWHENOTHERSTHENDBMS_LOB.FILECLOSE(L_FIL);END_BOUNDARY(CONN);RAISE;END;-結束處理二進制附件ENDIF;-結束處理附件內容DROP_DIRECTORY(DT_NAME);END;-結束過程ATTACHMENT真正發(fā)送郵件的過程PROCEDUREP_EMAIL(P_SENDORADDRESS2/ARCHAR2,-t送地址P_RECEIVERADDRESS2VARCHAR2)受地址ISL_CONNUTL_SMTEONNECTION;-義連接BEGIN/*初始化郵件服務器信息,連接郵件服務器*/L_CONN:=UTL_S
21、MT.OPEN_CONNECTION(P_SERVER,P_PORT);UTL_SMTPHELO(L_CONN,P_SERVER);/*smtp服務器登錄校驗*/IFP_NEED_SMTP=1THENUTL_SMTPCOMMAND(L_CONN,AUTHLOGIN,);UTL_SMTPCOMMAND(L_CONN,UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USER);UTL_SMTP.COMMAND(L_CONN,UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE
22、64_ENCODE(UTL_RAW.CAST_TO_RAW(P_PASS);ENDIF;/*設置發(fā)送地址和接收地址*/UTL_SMTPMAIL(L_CONN,P_SENDORADDRESS2);UTL_SMTPRCPT(L_CONN,P_RECEIVERADDRESS2);/*設置郵件頭*/UTL_SMTPOPEN_DATA(L_CONN);WRITE_DATA(L_CONN,Date,TO_CHAR(SYSDATE,yyyy-mm-ddhh24:mi:ss);/*設置發(fā)送人*/WRITE_DATA(L_CONN,From,P_SENDOR);/*設置接收人*/WRITE_DATA(L_CON
23、N,To,P_RECEIVER);/*設置郵件主題*/WRITE_DATA(L_CONN,Subject,P_SUB);WRITE_DATA(L_CONN,Content-Type,MULTIPART_MIME_TYPE);UTL_SMTFWRITE_DATA(L_CONN,UTL_TCCRLF);UTL_SMTf?WRITE_DATA(L_CONN,FIRST_BOUNDARY);WRITE_DATA(L_CONN,Content-Type,text/plain;charset=gb2312);-單獨空一行,否則,正文內容不顯示UTL_SMTFWRITE_DATA(L_CONN,UTL_TCCRLF);/*設置郵件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告項目造價管理辦法
- 邢臺高空揚塵管理辦法
- 接待外賓管理管理辦法
- 貨車司機進廠管理辦法
- 肩周炎中醫(yī)推拿課件
- 到夢空間培訓課件
- 肝臟穿刺護理課件
- 楓楊外國語初二數(shù)學試卷
- 工大附中高三數(shù)學試卷
- 福建南平七下數(shù)學試卷
- 山東醫(yī)藥技師學院招聘筆試真題2024
- 2025至2030中國柔性直流輸電行業(yè)運營規(guī)劃及發(fā)展前景深度分析報告
- 安全產風險管理制度
- 深化國有企業(yè)改革調研提綱
- 小學騎車安全課件
- 奶茶公司供應鏈管理制度
- 公司個人獨資章程范本
- 《中國酒類企業(yè)ESG披露指南》
- 物業(yè)消防培訓教學課件
- 2025年航空安全管理專業(yè)考試試卷及答案
- 2025至2030年中國玉米淀粉行業(yè)市場現(xiàn)狀分析及前景戰(zhàn)略研判報告
評論
0/150
提交評論