实例讲解如何通过Oracle成功发送邮件-入门基础
LINUX AS3+Oracle 9.2||10.20.1从Oracle成功发送邮件:
示例如下:
具体的测试环境:LINUX AS3 , Oracle 9.0.2.4
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> select * from v$version;
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
MAIL服务器为WIN2003,WINMAIL
1.保证ORACLE服务器到MAIL服务器网络畅通,25端口打开
2.创建发送邮件的procedure如下:
---------------------------------------
CREATE OR REPLACE PROCEDURE SEND_MAIL
(as_sender in varchar2, --邮件发送者
as_recp in varchar2, --邮件接收者
as_subject in varchar2, --邮件标题
as_msg_body in varchar2) --邮件内容
IS
ls_mailhost varchar2(30) := 'mail server'; -- address or IP
lc_mail_conn utl_smtp.connection;
ls_subject varchar2(100);
ls_msg_body varchar2(20000);
ls_username varchar2(256) := 'usercode';
ls_password varchar2(256) := 'password';
BEGIN
lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);
utl_smtp.helo(lc_mail_conn, ls_mailhost);
utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));
utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_password)));
ls_subject := 'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;
ls_msg_body := as_msg_body;
utl_smtp.mail(lc_mail_conn, '<'||as_sender||'>'); --这里的'<' 一定要写,不然会出现permanent error
utl_smtp.rcpt(lc_mail_conn, '<'||as_recp||'>');--这里的'<' 一定要写,不然会出现permanent error
utl_smtp.open_data(lc_mail_conn);
ls_msg_body := 'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||
chr(13) || chr(10) || chr(13) || chr(10) || ls_msg_body;
utl_smtp.write_raw_data(lc_mail_conn, utl_raw.cast_to_raw(ls_msg_body)); --这样写subject可以支持中文但body内容不支持中文;
-- utl_smtp.write_data(lc_mail_conn, ls_msg_body); --这样写subject不支持中文
utl_smtp.close_data(lc_mail_conn);
utl_smtp.quit(lc_mail_conn);
EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line('invalid operation');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line('transient error');
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line('permanent error');
WHEN OTHERS THEN
dbms_output.put_line('others');
end send_mail;
3.执行发送邮件:
exec send_mail('heyu@163.net','admin@163.net','我我','this is a oracle test mail');
注意事项:上面的过程如果在编译中出现demo_base64.encode must be declared,请大家创建下面的包和包体;
---------------------------------
CREATE OR REPLACE PACKAGE demo_base64 IS
-- Base64-encode a piece of binary data.
--
-- Note that this encode function does not split the encoded text into
-- multiple lines with no more than 76 bytes each as required by
-- the MIME standard.
文章转载自网管之家:http://www.bitscn.com/pdb/oracle/200804/137713.html
实例讲解如何通过Oracle成功发送邮件-入门基础相关推荐
- 炒股入门初学者基础知识讲解,如何掌握新手炒股入门基础知识
对一些刚入股市的新手来讲,要学习的股票术语和一些图标实在是太多了,很多的新手在炒股的时候不知道炒股的技巧是什么,毕竟万事开头难,所以大家要多了解一些基础的知识.下面为大家介绍下QR技术分析社区中关于炒 ...
- oracle自学入门教程,Oracle学习快速入门基础教程
修改密码方法:1.SQL>: grant connect to USRNAME identified by USRPWD :2.SQL>: alter user USRNAME ident ...
- Oracle 10g sql 入门基础知识 笔记 第一部分
1.orcale 数据库 DDL 定义语言 create drop DML 操作语言 insert delete update DCL 控制语言 grant revoke commit o ...
- ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...
<小白7天入门PHP Web开发>系列文章,面向单纯善良的完全不懂Web开发编程的入门速成课程,小白们如果感兴趣可以研读此系列文章,也可以连线提问.各路大神有何指教还请指点一二.希望各路大 ...
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)
文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...
- activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...
点击上方"好好学java",选择"置顶"公众号 重磅资源.干货,第一时间送达 重磅推荐 ① 纯福利 | 公众号资源大汇总,一年才一次! ② 重磅!!2018年 ...
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)...
文章源码托管:github.com/OUYANGSIHAI- 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖 ...
- linux Shell(脚本)编程入门实例讲解详解
linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...
- linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为centos7),拒绝复制粘贴: 实用性高:命令多为实际工作中用到的,实例讲解,拒绝纯 ...
最新文章
- 使用localStorage实现历史记录搜索功能也就是天猫app历史记录存储方便浏览
- 使用 Python 进行稳定可靠的文件操作
- 利用扩展事件进行调优和Troubleshooting PPT分享
- sklearn模型评估
- ASP.NET MVC Global.cs - 应用程序事件
- 刘良华(1969-),男,宁波市智慧城市规划标准发展研究院研究室副主任.
- C# 使用PictureBox控件--点击切换图片
- 设计模式(二十三)—— 模板方法
- “云时代架构”经典文章阅读感想八
- 【回归预测】基于matlab GA优化BP回归预测(含优化前的对比)【含Matlab源码 1790期】
- NOR Flash、NAND Flash、SPI Flash、CFI Flash
- 初一上册数学用计算机进行运算,初一上册数学
- 微信小程序mpvue框架
- 服务器功耗计算器_无服务器在您的用例中便宜吗? 用这个计算器找出答案。
- 面试那些事儿- UI设计面试常见问题
- Android组件化入门,分享一点面试小经验
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
- Mircrosoft Visual C++ Runtime Library提示窗口为何黏着桌面
- 大数据算法_看过来!2019“神气”大数据算法与应用赛决赛在即
- LNMP环境搭建(用阿里云epel源安装)