发送邮件的方法有很多,.NET前台也可以通过创建邮件类的形式,

通过微软提供的System.Net.Mail.dll 也可以简单的发送邮件。但是代码比较长,操作起来虽然很简单(很多细节忽略了)。

这里,我使用的是Oracle的UTL_SMTP包来发送邮件,在这里,代码还可以根据需要优化

(针对不同的服务可以在区分邮件的收件人,以及信息数据来源,和邮件信息体的划分,这一部分根据实际需要定制)

  --以下定义变量
TYPE g_chr_tbl IS TABLE OF VARCHAR2() INDEX BY BINARY_INTEGER;
  /*=========================================================
Description:
获取发件人地址,这一部分也可以针对不同邮件功能进行复用
Input: 记录发件人的表格()
output: g_chr_tbl
FUNCTION Name:
get_send_email_address
Version:
1.00 2016-05-025
Creator: weiyao(8000123) 测试: OK
===========================================================*/
PROCEDURE get_send_email_address(mail_to_address OUT g_chr_tbl) IS
i NUMBER := 1;
BEGIN i := 1;
FOR rec_mail IN (SELECT mv.meaning email_address, mv.*
FROM mes_comm_lookup_types mt,
mes_comm_lookup_values mv
WHERE mt.lookup_type_id = mv.lookup_type_id
AND mt.lookup_type = 'alarm__receiver')
LOOP
mail_to_address(i) := rec_mail.email_address;
--获取了这些人的邮件地址
dbms_output.put_line('地址' || i || ': ' || mail_to_address(i));
i := i + 1;
END LOOP; END get_send_email_address;

  

  /*=========================================================
Description:
发送邮件
Input:
output: html 格式的邮件信息,以及调试的 发送了的地址
FUNCTION Name:
send_email_to_wy
Version:
1.00 2016-05-025
Creator: weiyao(8000123) 测试: OK
===========================================================*/
PROCEDURE send_email_to_wy IS
--ORACLE发邮件
SenderAddress VARCHAR2(150) := '****@***.com'; --发送地址
PassWord VARCHAR2(150) := '******'; --服务器密码
--ReceiverAddress LONG := '****@**.com'; --接受地址
EmailServer VARCHAR2(30) := '192.168.*.*'; --服务器端口
Port NUMBER := 25; mail_to_address g_chr_tbl; --发送邮件的地址,存在数据表中,多人
conn UTL_SMTP.CONNECTION; v_start VARCHAR2(150);
v_subject LONG;
v_line LONG;
v_body LONG;
--crlf VARCHAR2(2) := CHR(13) || CHR(10); BEGIN
get_send_email_address(mail_to_address); --获取发送多个地址
IF mail_to_address.count > 0
THEN
conn := utl_smtp.open_connection(EmailServer, Port);
utl_smtp.ehlo(conn, 'tcl.com');
--utl_smtp.helo(conn, EmailServer); --和上面一句效果相同
UTL_SMTP.COMMAND(conn, 'AUTH LOGIN');
UTL_SMTP.COMMAND(conn,
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(SenderAddress))));
UTL_SMTP.COMMAND(conn,
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(PassWord))));
utl_smtp.mail(conn, '<' || SenderAddress || '>'); --发件人
--utl_smtp.rcpt(conn, '<' || ReceiverAddress || '>'); --单个收件人
FOR i IN 1 .. mail_to_address.count
LOOP
utl_smtp.rcpt(conn, '<' || mail_to_address(i) || '>'); --多个收件人
END LOOP;
--写内容
utl_smtp.open_data(conn);
utl_smtp.write_data(conn, 'From: itpub@tcl.com' || utl_tcp.crlf); --发件人
--utl_smtp.write_data(conn, 'To:' || ReceiverAddress || utl_tcp.crlf);
FOR i IN 1 .. mail_to_address.count
LOOP
utl_smtp.write_data(conn,
'To:' || mail_to_address(i) || utl_tcp.CRLF); --多个收件人
END LOOP;
---
---以下是发送邮件内容部分,可以单独分离出不同形式,已复用
--
v_subject := 'Subject:' || '预警信息邮件' || utl_tcp.crlf;
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(v_subject));
--body部分<HTML形式写>
utl_smtp.write_data(conn,
'Content-Type: text/html; charset=GB2312' ||
utl_tcp.crlf);
v_start := '<html><body>';
v_body := v_start || '您们好,现在时间是: ' ||
to_char(SYSDATE, 'yyyy/MM/DD hh24:mi:ss') || '<br>' ||
'该邮件为预警测试邮件,请不用回复!' || '<br>' || '<table>';
v_line := '<tr><td><table cellpadding="2" cellspacing="0" border="1" align="left">
<tr>
<th>第一列</th>
<th>第二列</th>
<th>第三列</th>
<th>第四列</th>';
/* FOR rec_email_data IN email_data LOOP --循环写入表内容
v_line := v_line || '<tr><td>' || rec_email_data.job || '</td><td>' ||
rec_email_data.schema_user || '</td><td>' ||
rec_email_data.what || '</td><td>' ||rec_email_data.failures || '</td></tr>'; END LOOP;*/
v_body := v_body || v_line || '</table></td></tr>';
v_body := v_body || '</table></body></html>';
dbms_output.put_line(v_body); --给自己看,可以复制到记事本中网页打开查看
utl_smtp.write_data(conn, utl_tcp.crlf); -- body 后面加上 utl_tcp.crlf utl_smtp.write_raw_data(conn,
utl_raw.cast_to_raw(convert(v_body,
'ZHS16GBK')));
utl_smtp.close_data(conn);
utl_smtp.quit(conn);
END IF;
EXCEPTION
WHEN OTHERS THEN
utl_smtp.quit(conn);
RAISE;
END send_email_to_wy;

测试结果:

 分享共进步,谢谢阅读!

利用Oracle 发送邮件(utl_smtp)的更多相关文章

  1. Oracle发送邮件,支持HTML,多收件人,多附件

    Oracle发邮件,权限问题 - 创建 ACL BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'email_server_permissions. ...

  2. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

  3. 利用Oracle创建表空间和用户

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217152.html 第一步,创建表空间 以SYS/sys账户和SYSDBA身份登录 ...

  4. 利用Oracle创建数据库

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217151.html 数据库的创建 打开"所有程序"-" ...

  5. 转-利用Oracle审计功能来监测试环境的变化

    http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...

  6. 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)

    利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...

  7. java利用commons-email发送邮件并进行封装

    本例中利用commons-email发送邮件并进行封装,支持html内容和附件:Commons Email是Apache的Commons子项目下的一个邮件客户端组件,它是基于JavaMail的,大大简 ...

  8. linux利用sendmail发送邮件的方法

    Linux利用sendmail发送邮件, 方法1 安装sendmail即可使用, mail -s "test" user@sohu.com bin/mail会默认使用本地sendm ...

  9. Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库

    Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库时出现以下错误: Message = "每个配置文件中只允许存在一个 <configSect ...

随机推荐

  1. CROC 2016 - Elimination Round (Rated Unofficial Edition) B. Mischievous Mess Makers 贪心

    B. Mischievous Mess Makers 题目连接: http://www.codeforces.com/contest/655/problem/B Description It is a ...

  2. Linux下简单分析请求有没有进到本机的工具tcpdump(网络接口的数据包的头信息)

    可以通过这个工具快速分析出一个请求到底有没有进入到本机.信息有点简单,对于前期的分析比较有帮助.而对于详细的分析可以借助iptables的raw表进行日志分析. 参考: http://man.linu ...

  3. 在pcDuino上使用蓝牙耳机玩转音乐

    1.资源 pcDuino板子一个.HDMI to VGA线一条.电源线一条.USB hub一个.显示器.鼠标.键盘.蓝牙适配器.蓝牙耳机. 2.资源已经到位,让我们开始吧 1.在ubuntu上安装蓝牙 ...

  4. .NET 4.6的RyuJIT尾递归优化的Bug

    今天看到园子里有一篇新闻稿.NET 4.6的RyuJIT编译器中发现严重的Bug提到,在.Net 4.6的x64程序中默认启用新的JIT程序RyuJIT在处理尾递归指令的时候有一个Bug,导致无法得到 ...

  5. Boost Converter

    Single Inductor Buck-Boost Converter in Tiny WCSP The TPS63036 is a non inverting buck-boost convert ...

  6. 【ASP】Window2008站点安全设置,IIS7/IIS7.5中目录执行权限的设置方法

    最近帮一个朋友管理Window 2008服务器,发现有个站点是用asp写的,更可怕的是还有传说中的“上传漏洞”,在上传文件夹中有好多的可执行的asp.php文件,算是shell后门脚本吧.怎么处理这个 ...

  7. B+树索引

    结构上 B树中关键字集合分布在整棵树中,叶节点中不包含任何关键字信息,而B+树关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引: B树中任何一个关键字只出现在一个结点中,而B+树中的关键 ...

  8. 关于目前自己iOS项目使用的插件

    1. VVDocumenter-Xcode 规范注释生成器. 2. RTImageAssets 本项目是一个 Xcode 插件,用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高 ...

  9. 探索并发编程(六)------Java多线程性能优化

    大家使用多线程无非是为了提高性能,但如果多线程使用不当,不但性能提升不明显,而且会使得资源消耗更大.下面列举一下可能会造成多线程性能问题的点: 死锁 过多串行化 过多锁竞争 切换上下文 内存同步 下面 ...

  10. android mount win2008 nfs

    win2008下添加NFS 安卓下运行(需要安装busybox 还有root) busybox mount -t nfs 192.168.1.2:/NFS /nfs -o nolock