Oracle邮件发送(内容中带有收件人独有信息)

Oracle邮件发送(内容中带有收件人独有信息)

Oracle发送邮件最简单的应该就是用smtp,具体使用和参数讲解我这儿没有

简单来说,发送邮件的思路就是

确认收件人的信息(邮箱账号密码)

确认服务器的信息(SMTP的服务器ip,地址等)

确认邮件头信息(发件人,收件人,主题)

确认邮件内容(内容为HTML格式,可以用编译器(比如vscode)先设计好,然后再往里面塞)

直接拿一个例子来说明(编译器为PL/SQL),需求是从用户表中找到创建时间在两天之内的用户,邮件欢迎并通知相关内容,内容中要带有用户的姓名以及一些独有信息

存储包的头

create or replace package send_email_pak is
--执行
procedure send_email_main;
--发送邮件
procedure send_mail(p_userid varchar2, p_email varchar2);
end send_email_pak;

存储包的体,打了一堆注释

--------------------以下为体---------------------
create or replace package body send_email_pak is
type g_email_tbl is table of varchar2(100) index by binary_integer;
/*==================================================
获取用户并执行发送邮件,对每个人都发送一封
==================================================*/
procedure send_email_main is
--获取最近两天的用户,已经发过的就不用发了
cursor aaa is
select u.userid, u.email
from user_table_name u--取出用户表内容
where u.createtime > to_char(sysdate - 2, 'yyyy-mm-dd')--创建时间在两天之内
and u.email is not null--只要有邮箱的
and not exists (select 1 from send_email_log s where s.userid = u.userid);--发过的就不发了
begin
--打开游标取内容
for main in aaa loop
--执行发送邮件的方法
--为什么不直接批量发送,是因为在邮件内容中使用了每个收件人的名字作为其中的内容,所以就直接一对一多次执行实现了
send_mail(main.userid, main.email);
--记录发送日志
insert into send_email_log(userid,logtime)(select main.userid,sysdate from dual);
end loop;
end send_email_main;
/*==================================================
初始化邮箱
==================================================*/
procedure cshyx(p_email varchar2,p_conn out utl_smtp.connection) is
begin
p_conn := utl_smtp.open_connection(smtp服务器主机的ip,smtp服务器正在侦听的端口号);
utl_smtp.ehlo(p_conn, smtp服务器地址);
utl_smtp.command(p_conn, 'auth login');--smtp服务器登录校验
utl_smtp.command(p_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(发件人邮箱账号))));
utl_smtp.command(p_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(发件人邮箱密码))));
utl_smtp.mail(p_conn, 发件人邮箱账号);
utl_smtp.rcpt(p_conn, 收件人邮箱账号);
utl_smtp.open_data(p_conn);
utl_smtp.write_data(p_conn, 'from: '||p_smtpemail|| utl_tcp.crlf); --发件人地址
utl_smtp.write_data(p_conn, 'to:'||p_email||''|| utl_tcp.crlf); --收件人地址
utl_smtp.write_raw_data(p_conn, utl_raw.cast_to_raw(convert('subject:' || '主题' ||utl_tcp.crlf,'zhs16gbk')));--主题
exception
when utl_smtp.transient_error or utl_smtp.permanent_error then
utl_smtp.quit(p_conn);
end cshyx;
/*==================================================
发送短信的主体
==================================================*/
procedure send_mail(p_userid varchar2, p_email varchar2) is
v_body long;
v_start long;
conn utl_smtp.connection;
begin
--开始拼接html内容
v_start := '<html><body>';
--初始化邮箱
cshyx(p_email,conn);
--简体中文
utl_smtp.write_raw_data(conn,utl_raw.cast_to_raw(convert('content-type:text/html;charset=gb2312' ||utl_tcp.crlf, 'zhs16gbk')));
utl_smtp.write_data(conn, utl_tcp.crlf);
--拼出来的html内容主体
v_body := v_start || '<br><tr><td>'||html不会写的话网上查吧,就不举例子了||'<br></td></tr></body></html>';
-------------
utl_smtp.write_data(conn,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 send_mail;
end send_email_pak;

以上

Oracle邮件发送(内容中带有收件人独有信息)的更多相关文章

  1. oracle 邮件发送

    CREATE OR REPLACE PROCEDURE PRC_sendmail(p_receiver VARCHAR2, -- 邮件接收人                               ...

  2. JavaMail邮件发送不成功的那些坑人情况及分析说明

    [我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...

  3. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  4. .NET开发邮件发送功能

    .NET开发邮件发送功能 今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知 ...

  5. iOS开发-邮件发送

    Web开发的时候邮箱注册登录是必不可少的,手机号可以更换,不过相对而言,邮箱只是用于比较重要的时候用到,比如找工作的时候必填的邮箱,注册网站会员的邮箱验证.现在的手机和Web的其实操作是一样的,大多数 ...

  6. Java Mail 邮件发送简单封装

    上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...

  7. 测试开发【提测平台】分享11-Python实现邮件发送的两种方法实践

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 按照开发安排,本篇本应该是关于提测页面的搜索和显示实现,怕相似内容疲劳,这期改下内容顺序,将邮件服务的相关的提前,在之前的产品需求和原型中 ...

  8. C#调用smtp邮件发送几个大坑

    1.网易.新浪邮箱新增了一个叫“授权码”的东西,开通smtp服务时,必须开启授权码,并且邮件发送代码中也需要加上授权码,如下代码: //指定邮箱账号和密码,需要注意的是,这个密码是你在邮箱设置里开启服 ...

  9. SpringBoot系列(十四)集成邮件发送服务及邮件发送的几种方式

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  10. Spring邮件发送1

    注意:邮件发送code中,邮件服务器的申请和配置是比较主要的一个环节,博主这里用的是QQ的邮件服务器.有需要的可以谷歌.百度查下如何开通. 今天看了下Spring的官方文档的邮件发送这一章节.在这里记 ...

随机推荐

  1. SourceTree 合并DEV分支到master

    SourceTree 合并DEV分支到master 1 切换到master分支 2 右键dev分支,选择 合并dev至当前分支 3 提交代码

  2. CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis

    前言: 前几天,点开自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章, 发现了一篇2019年写的:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试,于是 ...

  3. cpprest示例微服务链路嵌套调用层数1000以及跟踪

    本demo使用本人两个github项目cpprestsdk4mingw,zhepler-wxWdigets编写,一个简单的rest服务器cpprestbox,只提供GET方法方便测试,可以添加修改ap ...

  4. 关于进程同步与互斥的一些概念(锁、cas、futex)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   无 前言   最近为了实现在android lin ...

  5. Locust 断言的实现?

    一.检查点的方式有哪些: 主要是python 内置的assert 断言(自动断言)还有locust 中的catch_response 断言(手动断言):那么这两者之间有什么区别呢? 其实主要区别在与生 ...

  6. 01.Android线程池实践基础

    目录介绍 01.实际开发问题 02.线程池的优势 03.ThreadPoolExecutor参数 04.ThreadPoolExecutor使用 05.线程池执行流程 06.四种线程池类 07.exe ...

  7. 记录--这个前端Api管理方案会更好?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 简介 大家好,前端小白一枚,目前接触后台管理系统比较多,经常遇到不同对象的增删改查的接口,如何对Api进行一个有比较好的管理是个问题.在学 ...

  8. 记录--Vue自定义指令实现加载中效果v-load(不使用Vue.extend)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 网站效果演示:ashuai.work:8888/#/myLoad GitHub仓库地址代码:github.com/shuirongshu- ...

  9. 开发必会系列:hibernate事务

    一  事务定义及特性 1.数据库事务的定义:数据库事务(Database Transaction) 是指由一个或多个SQL语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果有一个SQL语句执 ...

  10. 任何样式,javascript都可以操作,让你所向披靡

    前言 习惯了在 css 文件里面编写样式,其实JavaScript 的 CSS对象模型也提供了强大的样式操作能力, 那就随文章一起看看,有多少能力是你不知道的吧. 样式来源 客从八方来, 样式呢, 样 ...