巧用SqlServer数据库实现邮件自动发送功能
作者 | 跟鸟叔学编程
来源 | 今日头条
前言:
项目里有一个需求,需要凌晨将前一天的订单数据汇总后形成报表,以邮件的形式发送到各个管理者的邮箱中,方便上层精灵们早上晨会的数据需求。
那么问题来了,我既不能晚上不睡觉汇总数据发邮件,又懒得写服务、研究云邮箱的配置,那么肿么办呢?
回忆曾经没事翻书,恍惚记得数据库有发送邮件的功能。于是乎脑海中浮现出了一个“邪恶的”念头,这些数据既然来自数据库,那么你就将好人做到底!帮洒家把这项工作一起完成了,岂不美哉!
瞬间感觉到我的快乐来了,“什么是快乐星球”?干活能偷懒,总会让人感觉到很愉悦。
使用数据库发送邮件需要三个步骤,配置数据库的邮件服务、编写存储过程、设置SQL作业,接下来开始逐步分享:
配置数据库邮件:
在SqlServer左侧菜单栏中,找到管理页签中数据库邮件选项:
接下来开始配置数据库邮件:
这里我们选择创建一个全新的配置,并启动该功能,随后下一步即可:
给配置文件起一个霸气的名字,说明随意填写即可,这个配置名字需要记得,后面我们还需要使用到它,点击添加功能,开始进行邮箱详细信息的配置:
这里填写好你们公司购买的邮件服务账号信息即可,如果没有的话,也可以使用QQ邮箱自带的SMTP功能,启动SMTP服务即可,功能上肯定会有一些限制:
填写好配置信息之后,列表中会出现刚才配置的SMTP账户信息:
剩下的步骤就是继续、继续、向着胜利出发:
成功之后也不要骄傲哦,需要测试一下,看邮箱配置是否可以正常地发送邮件,这一点非常的重要,否则后面的操作都会受到影响:
编写存储过程:
上述步骤测试通过后,我们开始进行存储过程的编写了,为SQL作业的自动执行打下脚本的基础。
存储过程的编写思路就是:将邮件需要发送的内容进行获取,然后通过SQL调用发送邮件的存储过程,将其需要的参数一一提供即可。
这里使用的存储过程是:sp_send_dbmail,需要的主要参数解释下:
- @profile_name:这个参数为刚才配置数据库邮件的名称。
- @recipients:接收人邮箱地址。
- @subject:邮件标题。
- @body:邮件内容。
- @body_format:邮件格式。
CREATE PROC [dbo].[AutoOrdersEmailNotice]
AS
BEGIN
DECLARE @EmailAddress NVARCHAR(100) = 'xxxxx@qq.com';
DECLARE @CONTENT NVARCHAR(500) = N'<h1>2021-6-5:订单汇总报表</h1><hr /><table border="1" width="500">
<tr align="center" style="font-weight:800;background-color:blue"><td>序号</td><td>产品名</td><td>订单数</td><td>单价</td><td>总价</td></tr>
<tr align="center"><td>1</td><td>车厘子</td><td>200</td><td>100</td><td>20000</td></tr>
<tr align="center"><td>2</td><td>冰糖心</td><td>100</td><td>50</td><td>5000</td></tr>
<tr align="center"><td>3</td><td>芝麻蕉</td><td>500</td><td>40</td><td>20000</td></tr>
</table>';
Exec msdb.dbo.sp_send_dbmail @profile_name='TestSqlMail',
@recipients=@EmailAddress,
@subject=N'2021-6-5日,订单汇总报表',
@body=@CONTENT,
@body_format = 'HTML'
END
编写后同样需要测试,如果可以执行该存储,可以实现邮件的正常发送功能,那么我们此时离胜利只有一步之遥了。
设置SQL作业:
SQL作业的用途就是可以自动、定时地执行SQL脚本,例如:每天更新用户年龄、更新一些订单的状态等等。
使用SQL作业,首先需要开启SqlServer代理服务:
接下来我们新建作业,用于执行刚才编写的存储过程:
填写作业需要的相关信息:
解析来选择新建步骤,不要点击确定按钮,这里填写SQL作业需要执行哪个数据库下面的,哪段SQL脚本:
设置SQL作业的执行计划,这里根据实际需求设置即可,我这里需要每天定时发送:
设置成功之后,同样需要测试一下:
数据库自动发送邮件成功了,流下了激动的泪水,偷懒果然会让人快乐,晚上可以加鸡腿了。当然我们每天需要关注一下,邮件发送的日志,掌握功能的运行情况:
总结一下:
这就是使用SqlServer完成的邮件自动发送功能,不同的数据库配置肯定会有所不同,但思路都是大相径庭的。