數據庫郵件


SQL Server數據庫郵件使用 SMTP 服務器轉發郵件,允許用戶配置數據庫郵件,並通過存儲過程 msdb.dbo.sp_send_dbmail 向特定的用戶發送郵件,郵件的格式可以是文本、Excel、或HTML。數據庫郵件的最大用處是向數據庫運維人員及時發送異常信息,當數據庫出現異常時,數據庫系統可以在第一時間發送郵件通知數據庫運維人員,這樣便於盡快排除數據庫運行的異常情況,保證數據庫能夠正常、持續地提供服務。 

一,配置數據庫郵件

配置數據庫郵件時,主要配置兩個對象:Account 和 Profile,數據庫賬戶(Account)包含SQL Server用於把郵件發送給SMTP 服務器的信息,包含外發(outgoing)的郵件地址,顯示名(Display Name)以及使用SMTP服務器地址;每一個account包含一個SMTP 服務器。數據庫郵件配置(Profile)是賬戶(Account)的有序集合,存儲過程 msdb.dbo.sp_send_dbmail 或SQL Server Agent 使用Profile發送郵件,而不是直接使用Account。Profile提供郵件發送服務的自動故障轉移(failover),由於一個Profile包含多個Account,當第一個Account出現故障時,Profile自動使用后續的Account發送郵件,實現郵件發送的自動故障轉移。當SMTP服務器變更時,DBA只需要修改Account,而不需要修改Profile,使得編程更加靈活和可靠。

下面的示例圖展示數據庫郵件的配置:3個Account,2個Profile,每個Profile都包含2個Account,

1,打開配置數據庫郵件的向導

在SSMS的Management目錄中,右擊“Database Mail”彈出快捷菜單,點擊“Configure Database Mail”,打開數據庫郵件配置向導 “Database Mail Configuration Wizard”,在向導界面上,選擇“Set up Database Mail by performing the following tasks”選項,點擊“Next”按鈕,開始配置數據庫郵件:

2,創建數據庫郵件配置(Profile)

在發送數據庫郵件之前,必須創建數據庫郵件的配置(Profile),在配置中指定:郵件服務器(SMTP Server)的賬戶,一個數據庫郵件配置可以包含多個SMTP 賬戶,點擊“Add”按鈕,添加SMTP Account:

3,配置SMTP賬戶

配置新添加的SMTP Account,配置數據庫郵件的發送地址(E-mail Address)及其顯示名稱(Display Name),郵件服務器的地址(在Server Name中填寫郵件服務器的URL,在Port Number中填寫端口號),和身份驗證(SMTP Authentication)信息:

在配置Account時,有三種SMTP驗證方式,分別是Windows域賬戶驗證、基本驗證(用戶名和密碼)、匿名驗證,大多數STMP服務器都需要賬戶登陸,很少有匿名驗證方式。

4,設置默認的Profile

如果設置了默認的Profile,執行msdb.dbo.sp_send_dbmail 時不需要@profile_name顯式指定配置名稱:

5,發送測試郵件

數據庫郵件(Database Mail)自帶有"Send Test E-Mail"和“View Database Mail Log”的功能,用來查看Database mail的發送情況。

 二,使用TSQL語句發送mail

1,使用 msdb.dbo.sp_send_dbmail 發送mail,由於設置了default profile,所以不需要顯示使用@Profile_Name來指定Profile。

EXEC msdb.dbo.sp_send_dbmail
    @recipients='xxx@domainname.com'
    ,@subject='Test email subject'
    ,@body='test email body'
    --,@profile_name='default'

使用msdb.dbo.sp_send_dbmail也能發送HTML格式的mail,需要在參數@body_format指定格式。
[ @body_format= ] 'body_format'

默認值是Text,表示發送的是郵件正文是text格式;HTML格式,可以使用HTML 標簽

2,發送text格式的郵件

EXEC msdb.dbo.sp_send_dbmail
    @recipients='xxx@domainname.com'
    ,@subject='Test email subject'
    ,@body='test email body'
    --,@profile_name='default_ProfileName'
    --,@body_format='text'

@Body_Format 參數的默認值是Text

3,發送Html格式的mail

declare @htmlbody varchar(max)
set @htmlbody='<table>
<tr>
    <td>first row</td>
</tr>
<tr>
    <td>second row</td>
</tr>
</table>'

EXEC msdb.dbo.sp_send_dbmail
    @recipients='xxx@domainname.com'
    ,@subject='Test email subject'
    ,@body=@htmlbody
    --,@profile_name='default_ProfileName'
    ,@body_format='Html'

4,將查詢結果作為mail的body

存儲過程 msdb.dbo.sp_send_dbmail 可以執行一個select 查詢子句,並將查詢結果作為一個附件發送出去。

EXEC msdb.dbo.sp_send_dbmail
    @recipients='xxx@domainname.com'
    ,@subject='Test email subject'
    --,@profile_name='default_ProfileName'
    --,@body_format='text'
    ,@query='select * from db_study.dbo.test'
    ,@attach_query_result_as_file = 1

 

參考文檔:

sp_send_dbmail (Transact-SQL)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM