Oracle中用于发送邮件的存储过程
2013-02-19 15:33
411 查看
create or replace procedure sendmail( p_To in varchar2,--目标 p_Subject in varchar2,--主题 p_content in varchar2--内容,可包含Html ) is v_From varchar2(100); v_Smtp_Host varchar2(100); v_Smtp_Port varchar2(100); v_Account varchar2(100); v_Account_exchange varchar2(100); v_PassWord varchar2(100); v_PassWord_exchange varchar2(100); v_Connection utl_smtp.connection; v_Temp varchar2(32767) default null; v_Boundary varchar2(256) default 'a1b2c3d4e3f2g1'; v_Body clob :=empty_clob();--邮件信息 v_Offset number;--正文偏移量 v_Amount number;--字符长度 begin v_From:='test@163.com';--发件人地址 v_Smtp_Host:='smtp.163.com';--163邮箱 v_Smtp_Port:='25';--端口号,一般都是25 v_Account:='test@163.com';--登录账号 v_Account_exchange:=utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_Account)));--要转换 v_PassWord:='123456';--密码 v_PassWord_exchange:=utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_PassWord)));--要转换 --连接服务器 v_Connection:=utl_smtp.open_connection(host => v_Smtp_Host,port => v_Smtp_Port); --utl_smtp.helo(v_Connection,v_Smtp_Host);--问候服务器 utl_smtp.ehlo(v_Connection,v_Smtp_Host);--问候服务器 -- 登录 utl_smtp.command(v_Connection,'Auth Login');--用AUTH LOGIN选项使用安全登录功能 --utl_smtp.command(v_Connection,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_Account)))); --utl_smtp.command(v_Connection,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_PassWord)))); utl_smtp.command(v_Connection,v_Account_exchange); utl_smtp.command(v_Connection,v_PassWord_exchange); --设置发件人和收件人 utl_smtp.mail(v_Connection,'<'||v_From||'>');--发件人信息 utl_smtp.rcpt(v_Connection,'<'||p_To||'>');--收件人信息 --记得在两边加上<>,否则出错 --初始化Clob dbms_lob.createtemporary(v_Body,true);--初始化Clob --头信息 v_Temp:=v_Temp||'MIME-Version:1.0'||chr(13)||chr(10); v_Temp:=v_Temp||'To: '||p_To||chr(13)||chr(10); v_Temp:=v_Temp||'From: '||v_From||chr(13)||chr(10); v_Temp:=v_Temp||'Subject: '||p_Subject||chr(13)||chr(10); v_Temp:=v_Temp||'Reply-To: '||v_From||chr(13)||chr(10); v_Temp:=v_Temp||'Content-Type: multipart/alternative; boundary= '||chr(34)||v_Boundary||chr(34)||chr(13)||chr(10); dbms_lob.write(v_Body,length(v_Temp),1,v_Temp);--将v_Temp中信息写入v_body --正文 v_Temp:=chr(13)||chr(10)||'--'||v_Boundary||'--'||chr(13)||chr(10); v_Temp:=v_Temp||'Content-Type:text/plain;charset=us-ascii'||chr(13)||chr(10)||chr(13)||chr(10); --v_Offset:=dbms_lob.getlength(v_Body)+1; --dbms_lob.write(v_Body,length(v_Temp),v_Offset,v_Temp);或者 dbms_lob.writeappend(v_Body,length(v_Temp),v_Temp); dbms_lob.writeappend(v_Body,length(p_content),p_content); --末尾分界线 v_Temp:=chr(13)||chr(10)||chr(13)||chr(10)||'--'||v_Boundary||'--'||chr(13)||chr(10)||chr(13)||chr(10); dbms_lob.writeappend(v_Body,length(v_Temp),v_Temp); --发送邮件 v_Offset:=1; v_Amount:=1900; utl_smtp.open_data(v_Connection); while v_Offset<dbms_lob.getlength(v_Body)+1 loop utl_smtp.write_raw_data(v_Connection,utl_raw.cast_to_raw(dbms_lob.substr(v_Body,dbms_lob.getlength(v_Body),1))); v_Offset:=v_Offset+v_Amount; v_Amount:=least(1900,dbms_lob.getlength(v_Body)-v_Amount); end loop; --关闭连接 utl_smtp.close_data(v_Connection); utl_smtp.quit(v_Connection); --释放CLOB dbms_lob.freetemporary(v_Body); --成功写信息 dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh-mi-ss')||'发送成功!'); --捕获异常 Exception when others then dbms_output.put_line(dbms_utility.format_error_stack); dbms_output.put_line(dbms_utility.format_call_stack); dbms_output.put_line(sqlerrm); end sendmail;
该存储过程在oracle 10g下编写,已测试通过。
相关文章推荐
- Oracle 存储过程发送邮件实例学习
- oracle发送邮件存储过程:
- Oracle 发送邮件 存储过程
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- Oracle发送邮件存储过程
- Oracle 发送邮件 存储过程
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- Oracle 存储过程发送邮件实例学习
- Oracle 存储过程发送邮件
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- Oracle 存储过程发送邮件
- Oracle 11g 使用 UTL_MAIL 包实现存储过程发送邮件
- Oracle 存储过程发送邮件
- Oracle 11g 使用 UTL_MAIL 包实现存储过程发送邮件
- oracle 存储过程发送邮件
- oracle使用UTL_MAIL包实现存储过程邮件发送(转)
- oracle使用UTL_MAIL包实现存储过程邮件发送(转)
- 用ORACLE 存储过程发送HTML邮件,支持文本和HTML两种格式,增加防中文乱码
- Oracle 发送邮件 存储过程
- SQL Server 存储过程发送邮件