正確建立SQL Server 2005郵件的實(shí)際操作步驟
以下的文章主要描述的是正確建立SQL Server 2005郵件的實(shí)際操作步驟,我們大家都知道數(shù)據(jù)庫郵件(Database Mail)是 SQL Server 2005數(shù)據(jù)庫引擎中***增的一項(xiàng)比較簡單實(shí)用的功能。
Database Mail代替了SQL Mail,它使用一個簡單SQL Server 2005郵件傳輸協(xié)議(SMTP)服務(wù)器,而不是SQL Mail所要求的MAPI賬號來發(fā)送電子郵件。
這允許你的組織發(fā)送帶附件和查詢結(jié)果的電子郵件,附加查詢結(jié)果,以及格式化HTML電子郵件。你還可以用它設(shè)定許多其它配置,而不需要你擁有一臺Exchange服務(wù)器或配置任何類型的MAPI工作區(qū)。
使用Database Mail的好處
除完全以SMTP為基礎(chǔ)外,Database Mail還具有許多其它優(yōu)點(diǎn):
它在數(shù)據(jù)庫引擎以外運(yùn)行,因此對數(shù)據(jù)庫引擎的壓力最小。
它支持群集,完全支持群集環(huán)境。
它的用戶資料(Profile)允許使用冗余SMTP服務(wù)器。(我將在本文后部分詳細(xì)討論這一點(diǎn)。)
它允許你以參數(shù)的形式向存儲過程發(fā)送查詢文本,存儲過程將執(zhí)行查詢并在電子郵件中發(fā)送結(jié)果。
消息通過一個Service Broker隊(duì)列異步傳送,因此你在發(fā)送電子SQL Server 2005郵件時不必等待回應(yīng)。
它為電子郵件發(fā)送提供多重安全保護(hù),如一個控制附件擴(kuò)展名的過濾器和一個附件大小管理器。
建立和使用Database Mail
在建立一個Database Mail解決方案前,你需要進(jìn)行一些規(guī)劃工作。首先,你必須具有一臺有效的SMTP服務(wù)器來傳送電子郵件。如果你沒有SMTP服務(wù)器,請參閱微軟知識庫文章308161了解建立SMTP服務(wù)器的相關(guān)信息。如果你無法確定組織是否擁有SMTP服務(wù)器,詢問你的網(wǎng)絡(luò)管理員獲得機(jī)器名稱或服務(wù)器的IP地址。你的網(wǎng)絡(luò)管理員可能需要對服務(wù)器進(jìn)行配置,以便SQL Server能夠發(fā)送電子郵件。
在Database Mail中,賬戶(Account)保存數(shù)據(jù)庫引擎用來發(fā)送電子SQL Server 2005郵件消息的信息。一個賬戶只為一臺電子郵件服務(wù)器保存信息,如賬戶名、電子郵件地址、回復(fù)電子郵件地址、服務(wù)器名稱或IP地址,以及一些可選的安全設(shè)置。
要發(fā)送一封Database Mail電子郵件,必須使用一個用戶資料(Profile)。用戶資料為一個或幾個賬戶設(shè)立。這種用戶資料-賬戶設(shè)置非常有用。它允許你將幾個賬戶和一個用戶資料聯(lián)系起來,這意味著你可以將幾臺電子郵件服務(wù)器和一個用戶資料聯(lián)系起來。
因此,當(dāng)你試圖發(fā)送一封電子郵件時,系統(tǒng)會嘗試用戶資料中的每個賬戶,直到消息被成功發(fā)送出去。如果一臺或幾臺SMTP服務(wù)器出現(xiàn)故障,這種設(shè)置就十分有用。它還允許你開發(fā)發(fā)送電子郵件的應(yīng)用程序代碼,而不必?fù)?dān)心針對不同的環(huán)境修改Profile名稱。你可以在開發(fā)和生產(chǎn)環(huán)境中使用相同的Profile名稱,唯一的差別在于用戶資料中包含的賬戶有所不同。
該是時候了解如何建立一個Database Mail賬戶了。在我們的例子中,我假設(shè)你正坐在一臺你具有系統(tǒng)管理員訪問權(quán)限的開發(fā)機(jī)器前。如果你沒有系統(tǒng)管理員權(quán)限,你需要成為msdb數(shù)據(jù)庫DatabaseMailUserRole的一員。
下面的腳本建立一些我在整個實(shí)例中都要用到的變量。注意:整個腳本將在msdb數(shù)據(jù)庫中運(yùn)行,Database Mail對象就保存在其中。
- USE msdb GO DECLARE @ProfileName VARCHAR(255) DECLARE
- @AccountName VARCHAR(255) DECLARE @SMTPAddress VARCHAR(255) DECLARE
- @EmailAddressVARCHAR(128) DECLARE @DisplayUser VARCHAR(128)
這里我建立了ProfileName、AccountName、STMP服務(wù)器名稱以及顯示在電子SQL Server 2005郵件From(郵件來自)框中的地址。
- SET @ProfileName = 'DBMailProfile';
- SET @AccountName = 'DBMailAccount';
- SET @SMTPAddress = 'mail.yoursmtpserver.com';
- SET @EmailAddress = 'DBMail@yoursmtpserver.com';
- SET @DisplayUser = 'The Mail Man';
下面的的腳本完成一些清理工作,以便如果我再次運(yùn)行腳本,就不必?fù)?dān)心出現(xiàn)錯誤。
IF EXISTS ( SELECT * FROM msdb.dbo.sysmail_profileaccount pa JOIN msdb.dbo.sysmail_profile p>下面的腳本給系統(tǒng)增加賬戶(Account)、用戶資料(Profile)和賬戶-用戶資料(Account-Profile)關(guān)系。
- EXECUTE msdb.dbo.sysmail_add_account_sp @account_name =
- @AccountName, @email_address = @EmailAddress,
- @display_name = @DisplayUser, @mailserver_name =
- @SMTPAddress EXECUTE msdb.dbo.sysmail_add_profile_sp
- @profile_name = @ProfileName EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
- @profile_name = @ProfileName, @account_name =
- @AccountName, @sequence_number = 1 ;
現(xiàn)在一切都已經(jīng)準(zhǔn)備妥當(dāng),我將發(fā)送一封測試電子郵件。
- EXEC msdb.dbo.sp_send_dbmail @recipients=N'chapman.tim@gmail.com',
- @body= 'Test Email Body', @subject = 'Test Email Subject', @profile_name = @ProfileName
要檢查消息是否發(fā)送成功,我可以對sysmail_allitems系統(tǒng)視圖執(zhí)行一次查詢。
- SELECT * FROM sysmail_allitems
以上的相關(guān)內(nèi)容就是對建立SQL Server 2005數(shù)據(jù)庫郵件的介紹,望你能有所收獲。
【編輯推薦】