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

 更新时间:2016年09月03日 15:58:55   作者:samwolf911  
本文给大家利用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数据库发送邮件的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 浅析常用数据库的自增字段创建方法汇总

    浅析常用数据库的自增字段创建方法汇总

    本篇文章是对常用数据库的自增字段创建方法进行了全面的汇总介绍,需要的朋友参考下
    2013-07-07
  • Oracle 大小写转换函数实例详解

    Oracle 大小写转换函数实例详解

    这篇文章主要介绍了Oracle 大小写转换函数实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • oracle SCN跟TIMESTAMP之间转换

    oracle SCN跟TIMESTAMP之间转换

    本文将详细介绍oracle SCN跟TIMESTAMP之间转换,需要的朋友可以参考下
    2012-11-11
  • 连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程

    连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程

    这篇文章主要介绍了连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Oracle 11g用户修改密码及加锁解锁功能实例代码

    Oracle 11g用户修改密码及加锁解锁功能实例代码

    这篇文章主要介绍了Oracle 11g用户修改密码及加锁解锁功能实例代码,需要的朋友可以参考下
    2017-11-11
  • Oracle设置密码永不过期的方法

    Oracle设置密码永不过期的方法

    这篇文章主要介绍了Oracle设置密码永不过期的方法,文中通过代码示例介绍的非常详细,对大家使用Oracle设置密码永不过期有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Oracle数据库的系统结构

    Oracle数据库的系统结构

    这篇文章主要介绍了Oracle数据库的系统结构,Oracle数据库的存储结构(Storage Structure)分为物理存储结构和逻辑存储结构两种,分别描述了在操作系统中和数据库系统内部数据的组织管理方式,需要的朋友可以参考下
    2023-07-07
  • 如何把Oracle 数据库从 RAC 集群迁移到单机环境

    如何把Oracle 数据库从 RAC 集群迁移到单机环境

    这篇文章主要介绍了把 Oracle 数据库从 RAC 集群迁移到单机环境,内容包括系统环境搭建,源数据库的操作及目标数据库的操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Oracle系列学习之Oracle正则表达式详解

    Oracle系列学习之Oracle正则表达式详解

    正则表达式应用广泛,在数据库中也有很大的应用空间,这篇文章主要给大家介绍了关于Oracle系列学习之Oracle正则表达式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Oracle数据库如何删除归档日志文件

    Oracle数据库如何删除归档日志文件

    这篇文章主要给大家介绍了关于Oracle数据库如何删除归档日志文件的相关资料,当Oracle中的归档日志空间满时,则需要把它清空,否则将会影响数据库正常运行,将无法正常登入ORACLE,需要的朋友可以参考下
    2023-11-11

最新评论