听到老师说PLSQL是可以写一个发送邮件功能的程序的,于是就去网上找轮子咯!

网上的资料还是蛮多的,也有很多是有问题的,还有一些就是直接贴源代码,缺乏必要的一下讲解。

在我的这篇博客你能得到什么呢?

  1. 一个亲测可用的源代码
  2. 对源代码的一些讲解
  3. 对发送邮件的原理的一个初步了解

首先贴出源代码(这是一个PROCEDURE )

CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人p_subject   VARCHAR2, -- 邮件标题p_message   VARCHAR2 -- 邮件正文) IS--下面四个变量请根据实际邮件服务器进行赋值v_mailhost VARCHAR2(30) := 'smtp.163.com'; --SMTP服务器地址v_user     VARCHAR2(30) := 'zjqmy520@163.com'; --登录SMTP服务器的用户名v_pass     VARCHAR2(20) := 'XXX'; --登录SMTP服务器的密码(密码如何得到看下面)v_sender   VARCHAR2(50) := 'zjqmy520@163.com'; --发送者邮箱,一般与 ps_user 对应v_conn utl_smtp.connection; --到邮件服务器的连接v_msg  VARCHAR2(4000); --邮件内容BEGIN-- 未经过SSL加密的为 25 PORTv_conn := utl_smtp.open_connection(v_mailhost, 25); --建立TCP连接。 连接smtp.163.com的25号端口utl_smtp.helo(v_conn, v_mailhost); --ehlo() 客户端向服务器发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令。-- 服务器端以OK作为响应,表示准备接收。utl_smtp.command(v_conn, 'AUTH LOGIN'); -- smtp服务器登录校验-- UTL_RAW.CAST_TO_RAW 解决不同字符集的数据库之间的相互访问utl_smtp.command(v_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_user))));utl_smtp.command(v_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_pass))));utl_smtp.mail(v_conn, v_sender); --设置发件人utl_smtp.rcpt(v_conn, p_recipient); --设置收件人-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行-- CRLF: Carriage Return Line Feed  回车换行v_msg := 'Date:' || to_char(SYSDATE, 'dd mon yy hh24:mi:ss') || utl_tcp.crlf || 'From: ' || '<' || v_sender || '>' ||utl_tcp.crlf || 'To: ' || '<' || p_recipient || '>' || utl_tcp.crlf || 'Subject: ' || p_subject ||utl_tcp.crlf || 'Content-Type:text/html;charset=GBK' || utl_tcp.crlf || utl_tcp.crlf -- 这前面是报头信息|| p_message; -- 这个是邮件正文--dbms_output.put_line('报文信息:'||v_msg);utl_smtp.open_data(v_conn); --打开流--使用utl_raw.cast_to_raw与utl_mail.write_raw_data写邮件正文时可以用中文( 解决不同字符集的数据库之间的相互访问)utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert(v_msg, 'ZHS16GBK'))); --这样写标题和内容都能用中文utl_smtp.close_data(v_conn); --关闭流utl_smtp.quit(v_conn); --关闭连接EXCEPTIONWHEN OTHERS THENdbms_output.put_line(dbms_utility.format_error_stack);dbms_output.put_line(dbms_utility.format_call_stack);
END send_mail;

新建一个SQL Window 测试一下:

BEGINsend_mail('1512769701@qq.com','测试邮件','来自PLSQL');
END;

看一下测试结果:

如何得到上面登录SMTP服务器的密码

我们这里以 163 邮箱为例

首先登录到163邮箱,点击[设置],然后点击设置下面的[POP3/SMTP/IMAP]

然后看左边的SideBar,点击[客户端授权密码]

最后在右边的页面中按照操作要求设置该邮箱的客户端授权码(登录SMTP服务器的密码)

然后对源代码的简要解析在源代码的注释上面已经差不多了,这里不再赘述。

最后对发送邮件的一个初步了解

  1. 发信人在用户代理上编辑邮件,并写清楚收件人的邮箱地址;

  2. 用户代理根据发信人编辑的信息,生成一封符合邮件格式的邮件;

  3. 用户代理把邮件发送到发信人的的邮件服务器上,邮件服务器上面有一个缓冲队列,发送到邮件服务器上面的邮件都会加入到缓冲队列中,等待邮件服务器上的SMTP客户端进行发送;

  4. 发信人的邮件服务器使用SMTP协议把这封邮件发送到收件人的邮件服务器上(它会自动根据收件人的邮箱来分析出收件人的邮箱服务器);

  5. 收件人的邮件服务器收到邮件后,把这封邮件放到收件人在这个服务器上的信箱中;

  6. 收件人使用用户代理来收取邮件。首先用户代理使用POP3协议来连接收件人所在的邮件服务器,身份验证成功后,用户代理就可以把邮件服务器上面的收件人邮箱里面的邮件读取出来,并展示给收件人。

参考博客[http://blog.csdn.net/zglwy/article/details/54026674]

用PLSQL给自己发一份邮件相关推荐

  1. 网易企业邮箱 跟Thunderbird 雷鸟 e mail 客户端发邮件有冲突,发双份 解决方法很简单(图)

    问题:用Thunderbird 客户端和网易企业邮箱,发一份邮件时发件箱里显示发了两封,有点头疼哦,客服也没有给出明确答复:而且在修改各种配置是干脆无法发送邮件了,后来下载了最新版Thunderbir ...

  2. 看我用Python一秒发数百份邮件,让财务部妹子追着喊6

    大家好,我是是编程秋枫 之前有分享过如何用Python发送邮件的文章,今天再分享一个如何用几行Python代码让财务部妹子追着喊666的实用案例. 喜欢编程的小伙伴可以加小编的Q群1026782549 ...

  3. 用python写情书_用Python给喜欢人的发一封邮件吧(群发)

    你好,我是goldsunC 让我们一起进步吧! 利用Python发送邮件 相信我们每个人都用过邮箱,虽然其它社交聊天软件已经非常普及,并且这些社交软件大多都具有文件发送的功能,但很多时候我们仍然离不开 ...

  4. php邮件群发系统日发5000,最新qq邮件群发日发10000封邮件

    今天一米软件来给大家介绍一下最新qq邮件群发日发10000封邮件的方法: 1.我们通过"在线正则表达式测试",匹配到了腾讯QQ号,我们把匹配到的这些QQ号复制下来,然后打开QQ邮箱 ...

  5. 如何发好外贸邮件,看亚马逊SES邮件服务商怎么说?

    对于外贸企业而言,多少都遇到过账号被封,被限制的问题.或者邮件送达率低,进垃圾箱多,客户回复率低,没有达到推广预期!而,是否思考过,问题到底出现在哪里? 像亚马逊SES邮件服务商,发邮件的硬核是有的, ...

  6. 外贸企业邮箱如何撤回已发送的邮件,发错的邮件怎么撤回?

    在日常办公中,发错邮件是一件很麻烦的事.如果邮件里面包含了重要的信息,却又不小心发给了错误的人,那可就麻烦了.有没有办法撤回已发出的邮件呢?其实,发错的邮件也是可以撤回的.不过,不是所有邮箱都能做到, ...

  7. thunderbird(雷鸟)企业邮件每次启动重复收到同一份邮件解决方法

          今天同事说用360卫士了一下***,删除了一个文件后,再次打开thunderbird企业邮件的时候每次启动获取新的信息的时候,都是重复收到同一份邮件解决方法.或者那几份邮件.        ...

  8. php爬取邮箱,SAS爬虫的简单应用-爬取帖子下的邮箱,给他们发一封邮件...

    前一段时间,看到了某些帖子下,有好多邮箱,然后我就想啊,如果我能给这些邮箱发一封邮件邀请关注我公众号,我的关注是不是会蹭蹭的往上涨...那么问题来了,如何可以批量get到网页上的邮箱呢?于是关于&qu ...

  9. 邮箱大师发送邮件服务器连接失败,网易邮箱大师退信的解决方法分享 网易邮箱大师发不了邮件的解决方法介绍...

    网易邮箱大师退信的解决方法分享 1.要发送邮件的地址写错了,导致邮件不能寄出: 2.邮箱被盗,是别人用你的邮箱发送垃圾邮件: 3.可能是设置自动回复的原因,网易的系统邮件不接受自动回复邮件. 解决方法 ...

最新文章

  1. 蓝桥杯:算法提高 9-2 文本加密
  2. 从0到1建立一张评分卡之模型建立
  3. mysql buffer pool_MySQL的查询缓存和Buffer Pool
  4. python 问题集
  5. jsbridge原理_React Hooks 原理与最佳实践
  6. c++输入一个整数判断是否为完全平方数_matlab判断一个整数是完全平方数
  7. 【数据结构与算法】顺序栈的Java实现
  8. -webkit-filter是神马?
  9. NoSQL Redis的学习笔记
  10. UITableView自动计算图片的高度 SDWebImage
  11. 告别枯燥,这本插画式 Python 书难怪销量 70W+
  12. 使用Java FXGL构建太空游侠游戏
  13. Nuxt.Js爬坑小记
  14. Microsoft Office Excel 已停止工作
  15. 【圣诞快乐】闻到圣诞的气息了,喜欢的节日在慢慢来临~祝大家Merry Christmas。
  16. 吉林大学嵌入式原理课程课堂作业
  17. Blender学习笔记-印花(decal)贴图
  18. 数据库想法整合,多表联立交互
  19. 科普读书会丨《被讨厌的勇气》:愤怒不是目的,是一种工具
  20. 微信Mac版 v3.0.0正式版上线!mac电脑上也能在朋友圈点赞和互动!

热门文章

  1. Hadoop3 - HDFS 文件存储策略
  2. 美国大学计算机专业排名2014,2014USNews美国大学研究生计算机专业排名
  3. [转]Berkeley DB实现分析
  4. 4个亲测有效的视频压缩工具,压缩视频体积小、画质清晰
  5. C语言 深度探究C语言中的函数
  6. MMGG热点 ▏AssangeDAO提案
  7. Panda3D设置窗体长宽及其他参数
  8. 飞飞php影视系统源码怎么改,飞飞cms影视系统安装说明 飞飞影视系统建站流程...
  9. 【转载】爸妈,求你们不要这么懂事
  10. 让男人又恨又爱加倍疼惜的十八种撒娇方式