程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 利用SQL Server 2005數據庫郵件發送電子郵件

利用SQL Server 2005數據庫郵件發送電子郵件

編輯:關於SqlServer
 

隨著技術的不斷進步,我們需要知道在你的信息系統發生了什麼,為了滿足這種日益增長的需求要求有更高級的方法。

能夠迅速和簡單地了解形勢,尤其是了解潛在的問題,這對於我們非常重要。微軟不斷的生產新產品來傳遞這種能力,在SQL Server 2005中可獲得的一些數據庫特別選項有:查詢通知、通知服務、服務代理和數據庫郵件。

數據庫郵件——SQL Server 2005中的一個新型電子郵件發送平台。在這篇文章的結尾,為了確保我們的數據庫郵件設置正常工作,我發送了一封試驗郵件。在本文中,我將基於該郵件來探討在SQL Server 2005中發送數據庫郵件的一些高級功能。

數據庫郵件選項

SQL Server 2005數據庫郵件為發送電子郵件信息提供了多種選項。這些選項包括:發送附件,設置敏感度和重要性,還包括查詢結果,用HTML格式發送電子郵件信息。

要在SQL Server 2005中發送電子郵件,你需要列表A中的腳本來建立一個包含一些數據的表格,以便稍後能夠使用查詢結果選項。腳本建立一個表格並加載一些試驗數據。

IF EXISTS(SELECT name from master..sysdatabases where name = 'SalesDB') DROP DATABASE SalesDB

CREATE DATABASE SalesDB;

USE SALESDB;
CREATE TABLE SalesHistory
( SaleID INT IDENTITY(1,1), Product VARCHAR(30), SaleDate SMALLDATETIME, SalePrice MONEY
)

DECLARE @i SMALLINT

SET @i = 1

WHILE (@i <=100)

BEGIN INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57) )

INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13) )

INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29) )

SET @i = @i + 1

END發送附件

通過電子郵件發送文件附件的能力對工作效率來說是十分重要的。下面的腳本將會發送一封電子郵件,其中包含文件名為FileAttachment.txt的附件,給附件存儲於我的C盤驅動器上。

你需要確保文件的存在,這樣發送過程就不會發生錯誤。

EXEC msdb.dbo.sp_send_dbmail
@recipients=N'[email protected]',
@body='Message Body',
@subject ='Message Subject',
@profile_name ='Database-mailProfile',
@file_attachments ='C://FileAttachment.txt';

敏感度和重要性

通常需要將一封郵件標記為敏感或重要,以使得收件人知道這些信息需要小心保護。下面的腳本將會發送一封郵件,敏感度為私人,重要性為高級。此外,腳本將會復制郵件地址[email protected]到信件中。

EXEC msdb.dbo.sp_send_dbmail
@recipients=N'[email protected]',
@body='Message Body',
@sensitivity ='Personal',
@importance ='High',
@copy_recipients ='[email protected]',
@subject ='Message Subject',
@profile_name ='Database-mailProfile';

查詢結果

擁有電子郵件發送能力的數據庫引擎的一個重要特征是它可以讓你向發送過程傳遞一個查詢。在SQL Mail和Database Mail中都有該特性。Database Mail中的一個新特性是可以將查詢結果作為附件,這一點在下面的腳本中展示。如果你不將查詢結果作為一文件,那麼它將被放置在郵件正文中。見列表B。

EXEC msdb.dbo.sp_send_dbmail

@recipients=N'[email protected]',
@body='Message Body',

@subject ='Message Subject',
@profile_name ='DatabaseMailProfile',
@query ='SELECT Product FROM sb2..SalesHistory GROUP BY Product HAVING COUNT(*) > 3',

@attach_query_result_as_file = 1,
@query_attachment_filename ='Results.txt'

HTML格式的信件

在數據庫郵件中我最喜愛的新特征是可以將你的郵件格式化為HTML格式。簡單看來,這沒什麼大不了的,但是這確實帶來一些很好的可能性。在前面的例子中,你發送的查詢結果包含在郵件正文中,因為該例子只包含一列數據,所以看起來沒有什麼不方便的。

但是,當在查詢結果集中包含多個域時,格式化變得每況愈下。一個好消息是,可以很簡單的使用SQL Server 2005中的一些XML和HTML新特征來格式化你的查詢結果集,因此,可以很容易的在信件中查看查詢結果。列表C中的腳本演示了如何利用查詢結果發送一封XML/HTML格式的電子郵件。

DECLARE @xml NVARCHAR(MAX)DECLARE @body NVARCHAR(MAX)
SET @xml =CAST(( SELECT Product AS 'td','',SUM(SalePrice) AS 'td'
FROM SalesHistory GROUP BY Product FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
SET @body ='<html><H1>Sales Reports</H1><body bgcolor=yellow><table border = 2><tr><th>Product</th><th>SaleAmount</th></tr>' SET @body = @body + @xml +'</table></body></html>'
EXEC msdb.dbo.sp_send_dbmail
@recipients =N'[email protected]',@body = @body,@body_format ='HTML',@subject ='Message Subject',@profile_name ='DatabaseMailProfile'當你發送HTML格式的郵件時,允許你將查詢結果嵌入到郵件的查詢部分,從而可以將查詢結果格式化成為更容易看的形式。(雖然,你可能會爭論說我在信件中使用的黃色背景,看起來並不是很舒服。)

可能性

當你能夠從數據庫引擎發送電子郵件時,這就引起了很多可能性。加上一些額外的邏輯和構建,你就可以編寫一個國產郵件系統,這樣就可以確保你總能找到想要找的人。在我的關於數據庫郵件系列三中,我將介紹如何書寫這樣一個應用。

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved