上一节已经讲解了如何在数据库中配置数据库邮件发送(备注: 数据库邮件功能是 基于SMTP实现的,首先在系统中 配置SMTP功能。即 在 “添加/删除程序”面板中 “增加/删除WINDOWS组件”,选中并双击 打开"IIS"或 “应用程序”,勾选 "SMTP SERVICE"然后 一路 点“下一步”即可。一般不需要这一步,直接配置即可)
完成配置后,我们可以结合存储过程和Job来实现定时从数据库发送邮件:
1、创建存储过程,在新建的存储过程中调用sp_send_dbmail存储过程(注:代码中的\'只是添加代码时自动添加的转义字符,实质代码中只有单引号)
-
Create PROCEDURE [dbo].[sp_send_error_alert]
-
AS
-
declare
-
@v_content nvarchar(max),
-
@v_mail_to nvarchar(500),
-
@v_body nvarchar(max),
-
@v_titile nvarchar(100)
-
,@v_br_id nvarchar(50)
-
,@v_installments nvarchar(10)
-
,@v_remark nvarchar(100)
-
BEGIN
-
SET NOCOUNT ON;
-
set @v_titile=\'测试邮件内容标题;
-
set @v_content=\'\';
-
-
DECLARE cursor_repayment CURSOR FOR
-
SELECT
-
br_id
-
,installments
-
,remark
-
from dw_account_repayment t
-
where
-
status!=1
-
and is_del=0
-
order by t.add_datetime desc;
-
-
OPEN cursor_repayment
-
FETCH NEXT FROM cursor_repayment INTO
-
@v_br_id --标ID
-
,@v_installments --期数
-
,@v_remark --错误描述
-
WHILE @@FETCH_STATUS=0
-
BEGIN
-
-
set @v_content=@v_content+\'<tr><td>\'+@v_br_id+\'</td>\'+\'<td>\'+@v_installments+\'</td>\'+\'<td>\'+@v_remark+\'</td></tr>\';
-
-
fetch next from cursor_repayment into
-
@v_br_id --标ID
-
,@v_installments --期数
-
,@v_remark --错误描述
-
end;
-
-
CLOSE cursor_repayment; --关闭游标
-
DEALLOCATE cursor_repayment; --清空游标
-
-
if LEN(@v_content)>0
-
begin
-
SET @v_body =\'<html><H1>自动还款所有异常列表</H1><body bgcolor=white><table border = 1><tr><th>标ID</th><th>期数</th><th>错误描述</th></tr>\'
-
SET @v_body = @v_body + @v_content +\'</table></body></html>\'
-
EXEC msdb.dbo.sp_send_dbmail
-
@recipients =N\'接收用户地址1@qq.com;接收用户地址2@qq.com\',@body = @v_body,@body_format =\'HTML\'
-
,@subject =@v_titile,@profile_name =\'上一节点的配置文件名(db_profiler)\
二、创建Job(SqlServer代理->作业),设置执行参数,定时执行此存储过程,即可实现定时发送邮件效果。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28699126/viewspace-1074615/
,如需转载,请注明出处,否则将追究法律责任。