利用Oracle数据库发送邮件的实例代码

--发送邮件的主过程如下所述:

Procedure send_mail_ (p_From Varchar2, --邮件发送人
p_Fromuser Varchar2, --发件人昵称
p_Touser Varchar2, --接受人昵称
p_To Varchar2, --邮件接收人
p_Cc Varchar2, --邮件抄送人
p_Subject Varchar2, --邮件标题
p_Message Varchar2, --邮件内容
p_User Varchar2, --邮件验证用户
p_Mailhost VARCHAR2, --邮件的服务地址
p_Psd Varchar2 --邮件验证密码
) IS
v_Conn Utl_Smtp.Connection; --到邮件服务器的连接
v_Msg Varchar2(32700); --邮件内容
Psrc Varchar2(4000);
Psrc1 Varchar2(4000);
v_Touser1 VARCHAR2(4000);
v_Touser VARCHAR2(500);
v_To Varchar2(500);
i Number := 1;
j Number := 1;
m Number := 1;
n Number := 1;
str_error VARCHAR2(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 永久性错误: 503 5.5.2 Send hello first.
Utl_Smtp.Command(v_Conn, 'AUTH LOGIN'); -- 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, ';'), ';') || ';';
IF Nvl(Instr(Psrc, ';', j), 0)>0 THEN
LOOP
i := Nvl(Instr(Psrc , ';', j), 0);
m := Nvl(Instr(Psrc1, ';', n), 0);
If i > 0 THEN
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); --设置收件人
IF v_Touser = '1' THEN
v_Touser := trim(SUBSTR(v_To,1,Instr(v_To,'@')-1));
END IF;
IF j = 1 THEN
v_Touser1 := v_Touser1 || v_Touser || '<' || v_To || '>';
ELSE
v_Touser1 := v_Touser1 || ';'|| v_Touser || '<' || v_To || '>';
END IF;
j := i + 1;
n := m + 1;
END IF;
Exit When i = 0;
END LOOP;
ELSE
Utl_Smtp.Rcpt(v_Conn, p_To); --设置收件人
v_Touser1 := v_Touser1 || p_Touser || '<' || p_To || '>';
END IF;
-- 设置抄送人----------------
i := 1;
j := 1;
IF nvl(p_Cc,'aa')<>'aa' THEN
Psrc := Rtrim(Ltrim(p_Cc, ';'), ';')|| ';';
IF Nvl(Instr(Psrc, ';', j), 0)>0 THEN
LOOP
i := Nvl(Instr(Psrc, ';', j), 0);
If i > 0 THEN
v_To := Trim(Substr(Psrc, j, i - j));
j := i + 1;
Utl_Smtp.Rcpt(v_Conn, v_To); --设置抄送人
END IF;
Exit When i = 0;
END LOOP;
ELSE
IF nvl(p_Cc,'1') <> '1' THEN
Utl_Smtp.Rcpt(v_Conn, p_Cc); --设置抄送人
END IF;
END IF;
END IF;
-- 创建要发送的邮件内容注意报头信息和邮件正文之间要空一行
v_Msg := 'Date: ' || To_Char(Sysdate, 'dd mon yy hh24: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
When Others THEN
str_error := Dbms_Utility.Format_Error_Stack || Dbms_Utility.Format_Call_Stack;
Dbms_Output.Put_Line(str_error);
END;

以上所述是小编给大家带来的利用Oracle数据库发送邮件的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Oracle 存储过程发送邮件实例学习

    复制代码 代码如下: CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR2, P_RECEIVER VARCHAR2, P_SERVER VARCHAR2, P_PORT NUMBER DEFAULT 25, P_NEED_SMTP INT DEFAULT 0, P_USER VARCHAR2 DEFAULT NULL, P_PASS VARCHAR2 DEFAULT

  • oracle 发送邮件 实现方法

    CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT        VARCHAR2,                                           P_SUB        VARCHAR2,                                           P_SENDOR     VARCHAR2,                                           P_RECEIVER  

  • 利用Oracle数据库发送邮件的实例代码

    --发送邮件的主过程如下所述: Procedure send_mail_ (p_From Varchar2, --邮件发送人 p_Fromuser Varchar2, --发件人昵称 p_Touser Varchar2, --接受人昵称 p_To Varchar2, --邮件接收人 p_Cc Varchar2, --邮件抄送人 p_Subject Varchar2, --邮件标题 p_Message Varchar2, --邮件内容 p_User Varchar2, --邮件验证用户 p_Mai

  • ADO.Net对oracle数据库操作的实例代码

    首先要写连接字符串 可以在web.config里写上 复制代码 代码如下: <connectionStrings>     <add name="oracleson" connectionString="Data Source=dingsenorcl;Persist Security Info=True;User ID=ds;Password=ds;Unicode=True" providerName="System.Data.Oracl

  • spring security数据库表结构实例代码

    PD建模图 建模语句 alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_AUTH; alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_RESO; alter table SYS_RESOURCES drop constraint FK_SYS_RESO_REFERENCE_SYS

  • C# Oracle数据库操作类实例详解

    本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长度等,同时还有哈稀表自动插入数据库等高级任务.需要特别指出的是:在执行SQL语句,返回 DataReader之前一定要先用.read()打开,然后才能读到数据,再用hashTable对数据库进行insert,update,del操作,注意此时只能用默认的数据库连接"connstr". 完整

  • oracle索引的测试实例代码

    前言 在测试oracle索引性能时大意了,没有仔细分析数据特点,将情况特此记录下来. 需求:  对一张100w记录的表的 stuname列进行查询,测试在建立索引与不建立索引的区别. 以下是开始用的创建代码及执行效果. 1. 随机数据生成代码分析 --为测试索引而准备的随机数据生成代码,先分析一下 select rownum as id, 'smith'||trunc(dbms_random.value(0, 100)) as stu_name, dbms_random.string('x',

  • Oracle LogMiner的使用实例代码

    LogMiner介绍 LogMiner是用于Oracle日志挖掘的利器. 百科解释: LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重做日志文件(归档日志文件)中的具体内容,LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图组成,它作为Oracle数据库的一部分来发布,是oracle公司提供的一个完全免费的工具. 本文主要演示LogMiner的使用,直观展示LogMiner的作用. 环境:Oracle 11

  • Oracle数据库正则表达式使用场景代码实例

    正则表达式: 无论是在前端还是后台正则表达式都是一个至关重要的知识点,例如判断一个手机号码输入是否正确,如果使用Java.C或者其他语言进行字符串进行判断,也许写几十行代码都不一定能解决,而且漏洞百出,而使用正则表达式,一行代码则可轻易解决,下面是举例说明正则表达式的用法: 1: \d 代表一个(阿拉伯数字) 任意数字 例如:判断用户输入的是否为11位数字(当然手机号码是不能这么简答的表达,只是解释一下\d的用法) select 'ok'  from dual  where regexp_lik

  • ASP.NET连接SQL数据库的简单实例代码

    复制代码 代码如下: using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HTMLControls;us

  • 利用kotlin实现一个饼图实例代码

    前言 饼图是许多人最熟悉的图表类型,也是使用频率最高的图表类型之一,本文主要给大家介绍了关于利用kotlin实现饼图的相关内容,分享出来供大家参考学习,代码不难,所以打算用kotlin来实现,增加熟练度,下面来一起看看吧. 先看看做的是什么 看完图,我们来整理下思路 饼图居中,每块区域都是一个扇形,需要canvas.drawArc根据角度来绘制 需要path.arcTo定位到扇形弧度的一半来绘制折线的起点 通过canvas.drawPath绘制折线,折线的长度根据饼图大小来设置比例 通过canv

  • javamail 发送邮件的实例代码分享

    注意:要先导入javamail的mail.jar包.以下三段代码是我的全部代码,朋友们如果想用,直接复制即可.第一个类:MailSenderInfo.java 复制代码 代码如下: package com.util.mail;import java.util.Properties;/** * 发送邮件需要使用的基本信息 */public class MailSenderInfo {    //发送邮件的服务器的IP和端口    private String mailServerHost;   

随机推荐