利用Oracle数据库发送邮件的实例代码
--发送邮件的主过程如下所述:
Proceduresend_mail_(p_FromVarchar2,--邮件发送人 p_FromuserVarchar2,--发件人昵称 p_TouserVarchar2,--接受人昵称 p_ToVarchar2,--邮件接收人 p_CcVarchar2,--邮件抄送人 p_SubjectVarchar2,--邮件标题 p_MessageVarchar2,--邮件内容 p_UserVarchar2,--邮件验证用户 p_MailhostVARCHAR2,--邮件的服务地址 p_PsdVarchar2--邮件验证密码 )IS v_ConnUtl_Smtp.Connection;--到邮件服务器的连接 v_MsgVarchar2(32700);--邮件内容 PsrcVarchar2(4000); Psrc1Varchar2(4000); v_Touser1VARCHAR2(4000); v_TouserVARCHAR2(500); v_ToVarchar2(500); iNumber:=1; jNumber:=1; mNumber:=1; nNumber:=1; str_errorVARCHAR2(20000); BEGIN v_Touser1:=''; v_Conn:=Utl_Smtp.Open_Connection(p_Mailhost,25); Utl_Smtp.Ehlo(v_Conn,p_Mailhost);--是用ehlo()而不是helo()函数否则会报:ORA-29279:SMTP永久性错误:5035.5.2Sendhellofirst. Utl_Smtp.Command(v_Conn,'AUTHLOGIN');--smtp服务器登录校验 Utl_Smtp.Command(v_Conn,Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(Utl_Raw.Cast_To_Raw(p_User)))); Utl_Smtp.Command(v_Conn,Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(Utl_Raw.Cast_To_Raw(p_Psd)))); Utl_Smtp.Mail(v_Conn,'<'||p_From||'>');--设置发件人 --设置收件人---------------- Psrc:=Rtrim(Ltrim(p_To,';'),';')||';'; Psrc1:=Rtrim(Ltrim(p_Touser,';'),';')||';'; IFNvl(Instr(Psrc,';',j),0)>0THEN LOOP i:=Nvl(Instr(Psrc,';',j),0); m:=Nvl(Instr(Psrc1,';',n),0); Ifi>0THEN v_To:=Trim(Substr(Psrc,j,i-j)); v_Touser:=nvl(Trim(Substr(Psrc1,n,m-n)),'1'); Utl_Smtp.Rcpt(v_Conn,v_To);--设置收件人 IFv_Touser='1'THEN v_Touser:=trim(SUBSTR(v_To,1,Instr(v_To,'@')-1)); ENDIF; IFj=1THEN v_Touser1:=v_Touser1||v_Touser||'<'||v_To||'>'; ELSE v_Touser1:=v_Touser1||';'||v_Touser||'<'||v_To||'>'; ENDIF; j:=i+1; n:=m+1; ENDIF; ExitWheni=0; ENDLOOP; ELSE Utl_Smtp.Rcpt(v_Conn,p_To);--设置收件人 v_Touser1:=v_Touser1||p_Touser||'<'||p_To||'>'; ENDIF; --设置抄送人---------------- i:=1; j:=1; IFnvl(p_Cc,'aa')<>'aa'THEN Psrc:=Rtrim(Ltrim(p_Cc,';'),';')||';'; IFNvl(Instr(Psrc,';',j),0)>0THEN LOOP i:=Nvl(Instr(Psrc,';',j),0); Ifi>0THEN v_To:=Trim(Substr(Psrc,j,i-j)); j:=i+1; Utl_Smtp.Rcpt(v_Conn,v_To);--设置抄送人 ENDIF; ExitWheni=0; ENDLOOP; ELSE IFnvl(p_Cc,'1')<>'1'THEN Utl_Smtp.Rcpt(v_Conn,p_Cc);--设置抄送人 ENDIF; ENDIF; ENDIF; --创建要发送的邮件内容注意报头信息和邮件正文之间要空一行 v_Msg:='Date:'||To_Char(Sysdate,'ddmonyyhh24:mi:ss')||Utl_Tcp.Crlf|| 'From:'||p_Fromuser||'<'||p_From||'>'||Utl_Tcp.Crlf|| 'To:'||v_Touser1||Utl_Tcp.Crlf|| 'Cc:'||p_Cc||Utl_Tcp.Crlf|| 'Subject:'||p_Subject||Utl_Tcp.Crlf|| Utl_Tcp.Crlf--这前面是报头信息 ||p_Message;--这个是邮件正文 Utl_Smtp.Open_Data(v_Conn);--打开流 Utl_Smtp.Write_Raw_Data(v_Conn,Utl_Raw.Cast_To_Raw(Convert('Content-Type:text/html;charset=utf-8'|| v_Msg,'ZHS16GBK')));--这样写标题和内容都能用中文 Utl_Smtp.Close_Data(v_Conn);--关闭流 Utl_Smtp.Quit(v_Conn);--关闭连接 Exception WhenOthersTHEN str_error:=Dbms_Utility.Format_Error_Stack||Dbms_Utility.Format_Call_Stack; Dbms_Output.Put_Line(str_error); END;
以上所述是小编给大家带来的利用Oracle数据库发送邮件的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对毛票票网站的支持!