如何使用SQLServer的db mail配合procedure發html格式的信

  • 16080
  • 0
  • SSMS
  • 2010-11-04

如何使用SQLServer的db mail配合procedure發html格式的信

在以往發送mail的事,我是想說在程式中,或ssis中做

拜讀了楊志強老師的書後,發現原來在sql server中也可以啟用db mail的功能來由sql server直接撈資料後發mail,且還有支援html的格式,比起ssis的陽春訊息還要好呢!

以下就來個範例介紹吧

首先如果你是使用sql 2005的話要先啟用這項功能

clip_image001

clip_image002

如果是sql sever2008的話,如下圖點了設定database mail之後

以下的範例皆是以sql server 2008當作範例說明

如果是第一次,則會提示你是否要啟用該功能,按是即可

clip_image003

接下來會出現精靈

clip_image004

如果是第一次設定,那就選第一項吧

clip_image005

先輸入你想要的設定檔名稱

clip_image006

之後按加入,設定方式如下,注意,基本驗証的地方,請輸入可以驗証的smtp帳密,若是domain帳號,請記得使用者名稱上要加上domain名稱ex: ms\jack

clip_image007

設定完後接下來我們選擇測試一下mail是否正常可以送出

clip_image008

輸入收件者的mail帳號

clip_image009

如果上述的測試是成功的,那就可以開始撰寫sql code了

我們新增一個查詢頁面將以下的sql語法碼貼上


exec msdb.dbo.sp_send_dbmail
@profile_name='test',   --設定檔
@recipients='rick@ms.com', --收件者
@subject='mail測試',  --主旨
@body='測試', --內文
@query='select getdate()',  --還可以下查詢式哦
@file_attachments='C:\test.txt',  --夾檔
@attach_query_result_as_file=1,  --把查詢的結果設為附件夾檔,不設的話就是在mail內容中看到囉
@body_format=TEXT    --使用text格式
--@body_format=HTML'  --也可以使用HTML格式
go


注意如果你的body_format是使用 html,且是使用outlook express收信的話,記得要將”檢視”->”HTML格式的郵件”選項打開,不然看到到亂碼,若是使用outlook則不會。

利用以上的方式,我們可以將這段寫成一個storedprocedre的方式,在裡面執行撈資料後以跑迴圈的方式發mail給客戶囉

以下為我自己寫的一段storedproced程式碼,將這段程式碼稍微修改一下後,使用sql server的agent來指定這樣,就可以自動發送mail囉!不一定要靠ssis或程式也可以發mail,是不是很方便呢?sql server真是好物..


		   1: SET ANSI_NULLS ON
		   2: GO
		   3: SET QUOTED_IDENTIFIER ON
		   4: GO
		   5: --
		   6: --exec SendMail
		   7: --
		   8: Create PROCEDURE [dbo].[SendMail] as 
		   9: DECLARE @mail varchar(50)
		  10: DECLARE @msg varchar(255)
		  11: DECLARE @titile varchar(255)
		  12: DECLARE @MyCursor CURSOR 
		  13: SET @MyCursor = CURSOR FAST_FORWARD
		  14:  
		  15: FOR 
		  16: select name,mail,bodymsg from mail
		  17: OPEN @MyCursor
		  18:  
		  19: --取得第一筆的值放到變數
		  20: FETCH NEXT FROM @MyCursor
		  21: INTO @titile,@mail,@msg
		  22: WHILE @@FETCH_STATUS = 0
		  23:  
		  24: BEGIN 
		  25: set @msg='<B><font size=7>'+@msg+'</B></font>'
		  26: exec msdb.dbo.sp_send_dbmail
		  27: @profile_name='test',   --設定檔
		  28: @recipients=@mail, --收件者
		  29: @subject=@titile,  --主旨
		  30:  
		  31: @body=@msg, --內文
		  32: @query='select getdate()',  --還可以下查詢式哦
		  33: @body_format=HTML  --也可以使用HTML格式
		  34:  
		  35: FETCH NEXT FROM @MyCursor
		  36: INTO @titile,@mail,@msg
		  37:  
		  38: END
		  39:  
		  40: CLOSE @MyCursor
		  41: DEALLOCATE @MyCursor
		  42:  

執行後,sql server回傳訊息,表示我發了四封信..

clip_image010

在outlook看到的結果,因為我有設定htmlcode,所以字型有變大了

clip_image011

關於 db mail的設定,可以到下列網址有更詳細的設定

‧覺得文章不錯請給我一個『讚』作為鼓勵喔!