热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

本文给大家利用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数据库发送邮件的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文介绍了在一卡通项目中设计加密管理方案时,证书服务器的配置步骤及其在用户权限控制中的应用。首先概述了证书服务器的基本设置,包括操作系统的选择和证书服务的安装,随后详细描述了服务器证书及客户端证书的创建过程。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 利用Python实现自动化群发邮件
    本文详细介绍如何使用Python语言来实现邮件的自动群发功能,适合希望提高工作效率的技术爱好者和开发者。 ... [详细]
  • Vue项目中应用骨架屏实践
    在当前开发的项目中,由于登录过程涉及多次重定向,导致用户体验不佳。为了改善这一状况,本文介绍了如何使用vue-skeleton-webpack-plugin插件在Vue项目中实现骨架屏,以减少用户感受到的白屏时间。 ... [详细]
  • 本文针对公司项目中普遍存在的IE浏览器兼容性问题,特别是IE9及以下版本,提出了具体的解决方案,确保用户在这些旧版浏览器中也能顺利实现图片上传预览功能。 ... [详细]
  • 开发笔记:Mongodb副本集集群搭建 ... [详细]
  • 1<table>2<tr>3<th>ID<th>4 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 菜鸟物流用户增长部现正大规模招聘P6及以上级别的JAVA工程师,提供年后入职选项。 ... [详细]
author-avatar
沈驰27
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有