1 create or replace procedure sendmail(
  2 p_To in varchar2,--目标
  3 p_Subject in varchar2,--主题
  4 p_content in varchar2--内容,可包含Html
  5 ) is
  6
  7 v_From varchar2(100);
  8 v_Smtp_Host varchar2(100);
  9 v_Smtp_Port varchar2(100);
 10
 11 v_Account varchar2(100);
 12 v_Account_exchange varchar2(100);
 13 v_PassWord varchar2(100);
 14 v_PassWord_exchange varchar2(100);
 15
 16 v_Connection utl_smtp.connection;
 17
 18 v_Temp varchar2(32767) default null;
 19 v_Boundary varchar2(256) default 'a1b2c3d4e3f2g1';
 20
 21 v_Body clob :=empty_clob();--邮件信息
 22
 23 v_Offset number;--正文偏移量
 24 v_Amount number;--字符长度
 25
 26 begin
 27   v_From:='test@163.com';--发件人地址
 28   v_Smtp_Host:='smtp.163.com';--163邮箱
 29   v_Smtp_Port:='25';--端口号,一般都是25
 30   v_Account:='test@163.com';--登录账号
 31   v_Account_exchange:=utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_Account)));--要转换
 32   v_PassWord:='123456';--密码
 33   v_PassWord_exchange:=utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_PassWord)));--要转换
 34
 35   --连接服务器
 36   v_Connection:=utl_smtp.open_connection(host => v_Smtp_Host,port => v_Smtp_Port);
 37   --utl_smtp.helo(v_Connection,v_Smtp_Host);--问候服务器
 38   utl_smtp.ehlo(v_Connection,v_Smtp_Host);--问候服务器
 39
 40   -- 登录
 41   utl_smtp.command(v_Connection,'Auth Login');--用AUTH LOGIN选项使用安全登录功能
 42   --utl_smtp.command(v_Connection,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_Account))));
 43   --utl_smtp.command(v_Connection,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_PassWord))));
 44   utl_smtp.command(v_Connection,v_Account_exchange);
 45   utl_smtp.command(v_Connection,v_PassWord_exchange);
 46
 47   --设置发件人和收件人
 48   utl_smtp.mail(v_Connection,'<'||v_From||'>');--发件人信息
 49   utl_smtp.rcpt(v_Connection,'<'||p_To||'>');--收件人信息
 50   --记得在两边加上<>,否则出错
 51
 52   --初始化Clob
 53   dbms_lob.createtemporary(v_Body,true);--初始化Clob
 54
 55   --头信息
 56   v_Temp:=v_Temp||'MIME-Version:1.0'||chr(13)||chr(10);
 57   v_Temp:=v_Temp||'To: '||p_To||chr(13)||chr(10);
 58   v_Temp:=v_Temp||'From: '||v_From||chr(13)||chr(10);
 59   v_Temp:=v_Temp||'Subject: '||p_Subject||chr(13)||chr(10);
 60   v_Temp:=v_Temp||'Reply-To: '||v_From||chr(13)||chr(10);
 61   v_Temp:=v_Temp||'Content-Type: multipart/alternative; boundary= '||chr(34)||v_Boundary||chr(34)||chr(13)||chr(10);
 62   dbms_lob.write(v_Body,length(v_Temp),1,v_Temp);--将v_Temp中信息写入v_body
 63
 64   --正文
 65   v_Temp:=chr(13)||chr(10)||'--'||v_Boundary||'--'||chr(13)||chr(10);
 66   v_Temp:=v_Temp||'Content-Type:text/plain;charset=us-ascii'||chr(13)||chr(10)||chr(13)||chr(10);
 67   --v_Offset:=dbms_lob.getlength(v_Body)+1;
 68   --dbms_lob.write(v_Body,length(v_Temp),v_Offset,v_Temp);或者
 69   dbms_lob.writeappend(v_Body,length(v_Temp),v_Temp);
 70
 71   dbms_lob.writeappend(v_Body,length(p_content),p_content);
 72
 73   --末尾分界线
 74   v_Temp:=chr(13)||chr(10)||chr(13)||chr(10)||'--'||v_Boundary||'--'||chr(13)||chr(10)||chr(13)||chr(10);
 75   dbms_lob.writeappend(v_Body,length(v_Temp),v_Temp);
 76
 77   --发送邮件
 78   v_Offset:=1;
 79   v_Amount:=1900;
 80   utl_smtp.open_data(v_Connection);
 81
 82   while v_Offset<dbms_lob.getlength(v_Body)+1
 83   loop
 84   utl_smtp.write_raw_data(v_Connection,utl_raw.cast_to_raw(dbms_lob.substr(v_Body,dbms_lob.getlength(v_Body),1)));
 85   v_Offset:=v_Offset+v_Amount;
 86   v_Amount:=least(1900,dbms_lob.getlength(v_Body)-v_Amount);
 87   end loop;
 88
 89   --关闭连接
 90   utl_smtp.close_data(v_Connection);
 91   utl_smtp.quit(v_Connection);
 92   --释放CLOB
 93   dbms_lob.freetemporary(v_Body);
 94
 95   --成功写信息
 96   dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh-mi-ss')||'发送成功!');
 97
 98   --捕获异常
 99   Exception
100   when others then
101   dbms_output.put_line(dbms_utility.format_error_stack);
102   dbms_output.put_line(dbms_utility.format_call_stack);
103   dbms_output.put_line(sqlerrm);
104
105 end sendmail;

该存储过程在oracle 10g下编写,已测试通过。

转载于:https://www.cnblogs.com/timememory/archive/2013/02/19/2917167.html

Oracle中用于发送邮件的存储过程相关推荐

  1. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

  2. 用于在MYSQL中创建存储过程的关键字是_下面选项中,用于在删除存储过程时,检测存储过程是否存在的关键字是_学小易找答案...

    [判断题]秦陵兵马俑三号坑设计的是 军事指挥部 . [单选题]以下不是超塑性变形特点的是:( ) [判断题]如果从表中的外键引用了主表中的值,则不能删除主表中被引用的数据. [单选题]下面选项中,用于 ...

  3. Oracle中通过Function,存储过程,触发器,调用实现解析Clob字段中存在的xml字符串...

    摘要:接着之前的问题,在Oracle数据库中通过Function,存储过程,触发器实现解析数据表中CLOB大数据字段中存在的xml字符串有时,有个特殊的时间字符串要在数据库格式化处理,之前解析过来的时 ...

  4. oracle中用于返回日期和时间,oracle中日期和时间函数的使用

    日期和时间函数的使用 1,           SYSDATE:此函数用于返回系统当前日期 2,           ADD_MONTHS(日期,n):返回指定日期之前或之后的n个月所对应的日期(n为 ...

  5. oracle存储过程 论文,Oracle中基于Java的存储过程开发_计算机论文

    论文导读::存储过程是一种数据库对象,将执行计划存储在数据库的服务器中,它的执行速度比独立执行同样的程序要快.任何一个设计良好的数据库应用程序都应该用到存储过程.存储过程可以使得对数据库的管理.显示关 ...

  6. oracle怎么定时执行存储过程6,Oracle中如何定时调用存储过程

    创建测试表 SQL>   create   table   a(a   date); 表已创建. 创建一个自定义过程 SQL>   create   or   replace   proc ...

  7. Oracle中的包、存储过程、函数被锁定解决方案

    1.查出是哪些进程锁住了指定的对象 Select b.SID,b.SERIAL# From dba_ddl_locks a, v$session b Where a.session_id = b.SI ...

  8. oracle中%type用法,oracle中declare用法

    第8 章 函数与存储过程 Oracle数据库中不仅可以使用单条语句对数据库进行 数据库中不仅可以使用单条语句对数据库进行 查操作,而且可以多条语句组成一个语句块, 增.删.改.查操作,而且可以多条语句 ...

  9. oracle中的listener.ora和tnsnames.ora

    一.oracle的客户端与服务器端 oracle在安装完成后服务器和客户端都需要进行网络配置才能实现网络连接.     服务器端配置监听器,客户端配置网络服务名    服务器端可配置一个或多个监听程序 ...

最新文章

  1. Samtools(CentOS Linux)安装及常用命令详解
  2. c语言pushback用法,C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack...
  3. Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)
  4. 设置计算机的启动顺序CDROM.C.A,amibios怎么设置cdrom
  5. 回文数Python解法
  6. ruijie交换机lacp动态_Server2016和华为s5720交换机链路聚合增加带宽
  7. 每秒可产生1亿个序列号的序列生成代码 支持64台服务器同步生成
  8. 最强战队出炉,2020腾讯广告算法大赛圆满落幕
  9. HashTable与ConcurrentHashMap的区别
  10. 一个简单的划词翻译工具
  11. a-select 下拉框样式修改
  12. 悉尼大学计算机科学gpa,悉尼大学计算机gpa
  13. elasticsearch中forcemerge清除文件占用的磁盘空间
  14. wordpress添加备案链接 亲测无误
  15. 微软早就该收购雅虎了
  16. 要考驾照科目二了,好紧张
  17. WECHAT 微信扫码关注公众号方法无法获取头像和昵称了
  18. workman 日志_workerman
  19. ipad微信已连接服务器失败,云旗舰云非凡千纸鹤微信安全提醒怎么办,你的微信账号通过ipad副设备发表失败...
  20. Bugku web(1—35)

热门文章

  1. 安卓c语言文档下载,C语言.NET技术09.doc
  2. java 深拷贝 序列化_java 之 利用序列化实现深拷贝
  3. primefaces教程_Primefaces,带有JPA的Spring 4(Hibernate 4 / EclipseLink)示例教程
  4. linux中更改用户密码_如何在Linux中更改用户密码
  5. android单选按钮_Android单选按钮示例
  6. callable线程池示例_Java Callable Future示例
  7. 如何高效学习web_使用高效的Web工具改善您的业务
  8. [已解决] org.hibernate.HibernateException:没有活动事务,get无效
  9. LiteSpeed Web服务器“恢复所有侦听器”解决方法
  10. linux压缩命令gzip_Linux gzip命令示例