上文已講過如何在數(shù)據(jù)庫中配置數(shù)據(jù)庫郵件發(fā)送(備注: 數(shù)據(jù)庫郵件功能是 基于SMTP實現(xiàn)的,首先在系統(tǒng)中 配置SMTP功能。即 在 “添加/刪除程序”面板中 “增加/刪除WINDOWS組件”,選中并雙擊 打開"IIS"或 “應用程序”,勾選 "SMTP SERVICE"然后 一路 點“下一步”即可。一般不需要這一步,直接配置即可)
本文給出一個使用實例,結合存儲過程和Job來實現(xiàn)定時從數(shù)據(jù)庫發(fā)送郵件:
1、創(chuàng)建存儲過程,在新建的存儲過程中調用sp_send_dbmail存儲過程(注:代碼中的\'只是添加代碼時自動添加的轉義字符,實質代碼中只有單引號)
Create PROCEDURE [dbo].[sp_send_error_alert]
AS
declare
@v_contentnvarchar(max),
@v_mail_tonvarchar(500),
@v_bodynvarchar(max),
@v_titilenvarchar(100)
,@v_br_idnvarchar(50)
,@v_installmentsnvarchar(10)
,@v_remarknvarchar(100)
BEGIN
SETNOCOUNTON;
set@v_titile='測試郵件內(nèi)容標題;
set@v_content=\'';
DECLAREcursor_repaymentCURSORFOR
SELECT
br_id
,installments
,remark
fromdw_account_repaymentt
where
status!=1
andis_del=0
orderbyt.add_datetimedesc;
OPENcursor_repayment
FETCHNEXTFROMcursor_repaymentINTO
@v_br_id--標ID
,@v_installments--期數(shù)
,@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>';
fetchnextfromcursor_repaymentinto
@v_br_id--標ID
,@v_installments--期數(shù)
,@v_remark--錯誤描述
end;
CLOSEcursor_repayment;--關閉游標
DEALLOCATEcursor_repayment;--清空游標
ifLEN(@v_content)>0
begin
SET@v_body=\'html>H1>自動還款所有異常列表/H1>bodybgcolor=white>tableborder=1>tr>th>標ID/th>th>期數(shù)/th>th>錯誤描述/th>/tr>'
SET@v_body=@v_body+@v_content+\'/table>/body>/html>'
EXECmsdb.dbo.sp_send_dbmail
@recipients=N\'接收用戶地址1@qq.com;接收用戶地址2@qq.com',@body=@v_body,@body_format=\'HTML'
,@subject=@v_titile,@profile_name=\'上一節(jié)點的配置文件名(db_profiler)
創(chuàng)建Job(SqlServer代理->作業(yè)),設置執(zhí)行參數(shù),定時執(zhí)行此存儲過程,即可實現(xiàn)定時發(fā)送郵件效果。