在sql server 2005里出現了一種新的郵件子系統,叫做數據庫郵件。數據庫郵件比起早些sql server版本的sql郵件有很大改進。現在你可以建立多個賬號和個人資料以滿足你不同的應用電子郵件需求
本文將要討論建立和管理數據庫郵件。
什么是數據庫郵件?
數據庫郵件是一個郵件隊列系統。電子郵件消息存儲在msdb數據庫里的隊列中等待被處理。當一個電子郵件消息到達隊列時,將會觸發一個外部過程來把隊列中的這個消息送到合適的郵件服務器端。郵件一旦被發送,一個裝有郵遞狀態的電子郵件消息就會被郵遞回sql server。
打開數據庫郵件功能項
數據庫郵件在模塊之外是不可用的。由于sql server安全模型缺省把所有選項都關閉了,如果你要想使用它的話就需要使能數據庫郵件。你可以使用表面區域配置工具,或者用下面的t-sql來使能數據庫郵件:
  sp_configure'showadvancedoptions',1;
  go
  reconfigure;
  go
  sp_configure'databasemailxps',1;
  go
  reconfigure
  go建立賬號
數據庫郵件賬號鑒別sql server 2005應該如何和smtp服務器進行通信。這個賬號具體說明了電子郵件如何被格式化和發送的。單一的賬號將會鑒別單一的smtp服務器和認證方法。數據庫郵件所使用的賬號不和sql server登錄賬號相對應。
當建立一個賬號時你需要鑒別足夠的信息以便使sql server 2005能夠和smtp服務器通訊,如果需要的話還要認證。可以參考books online獲取定義賬號的完整選項列表。你可以使用數據庫郵件配置向導來建立賬號,向導可以在sql server management studio里的“管理”文件夾“數據庫郵件”下找到,或者使用存儲過程(sp)“sysmail_add_account_sp”。這里有一個腳本使用了上面提到的存儲過程來創建一個和不需要認證的smtp服務器相通信的賬號。
|||  executemsdb.dbo.sysmail_add_account_sp
  @account_name='databaseadministrationaccount',
  @description='mailaccountforusedbydbastaff',
  @email_address='[email protected]',
  @display_name='prodserver01dbamail',
  @replyto_address='[email protected]',
  @mailserver_name='mailserver.databasejournal.com';這個賬號名為“數據庫管理賬號”,郵件地址為[email protected]。使用數據庫郵件的優點之一就是這個郵件地址不必再是你郵件系統中的一個有效的郵件賬號。除此之外,你可以把回復地址和你的數據庫郵件賬號聯系起來。在上面的例子中,我定義了[email protected]作為回復地址。所以現在,當某人從我的自動郵件通知處理得到一封郵件時,他們可以回復,這個回復郵件能直接發送到我這里。
有了數據庫郵件,你就可以根據你的需要盡可能多地建立郵件賬號。一會兒,我將討論你需要建立多個數據庫郵件賬號的原因。
建立個人資料并和賬號相聯系
在能夠發送數據庫郵件到一個在賬號中鑒別過的smtp服務器之前,你需要把賬號和個人資料聯系起來,把訪問權授予個人資料。數據庫郵件個人資料用來提高郵件安全性。有兩種個人資料,公開的和私有的。公開的個人資料任何人都可見,它把訪問權授予msdb數據庫,是msdb數據庫中databasemailuserrole中的成員,而私有的個人資料只可以被授權訪問私有個人資料的特定用戶使用。一個郵件個人資料能夠和一個或多個賬號相聯系。你可以使用數據庫郵件配置向導來管理個人資料,或者使用一些和下面類似的t-sql命令來建立郵件個人資料:
|||  --createadatabasemailprofile
  executemsdb.dbo.sysmail_add_profile_sp
  @profile_name='databaseadministrationprofile',
  @description='mailprofileforusebydbaprocesses';這里我只是創建了一個名為“數據庫管理個人資料”的個人資料。現在你僅僅有了一個剛創建的個人資料,并不意味著你能夠使用它來發送郵件。你仍然需要把那個個人資料和至少一個數據庫郵件賬號及msdb數據庫里的一個用戶聯系起來。為了做到這些我可以執行下面的語句:
  --addtheaccounttotheprofile
  executemsdb.dbo.sysmail_add_profileaccount_sp
  @profile_name='databaseadministrationprofile',
  @account_name='databaseadministrationaccount',
  @sequence_number=1;
  --grantaccesstotheprofile
  executemsdb.dbo.sysmail_add_principalprofile_sp
  @profile_name='databaseadministrationprofile',
  @principal_name='prodserver01',第一個execute語句把我的個人資料和一個賬號相聯系。第二個execute語句把我的個人資料和‘prodserver01’msdb數據庫用戶相聯系。這個用戶在他們能夠發送郵件之前必須是databasemailuserrole中的成員。既然我把個人資料和一個特定用戶聯系起來,這個個人資料就是一個私有個人資料。要創建一個公共個人資料你需要把個人資料和“公共”數據庫角色相聯系。
發送數據庫郵件
 sql server提供了存儲過程“sp_send_dbmail”來發送郵件。下面的句法用來調用這個存儲過程: |||
sql server提供了存儲過程“sp_send_dbmail”來發送郵件。下面的句法用來調用這個存儲過程: |||  sp_send_dbmail[[@profile_name=]'profile_name']
  [,[@recipients=]'recipients[;...n]']
  [,[@copy_recipients=]'copy_recipient[;...n]']
  [,[@blind_copy_recipients=]'blind_copy_recipient[;...n]']
  [,[@subject=]'subject']
  [,[@body=]'body']
  [,[@body_format=]'body_format']
  [,[@importance=]'importance']
  [,[@sensitivity=]'sensitivity']
  [,[@file_attachments=]'attachment[;...n]']
  [,[@query=]'query']
  [,[@execute_query_database=]'execute_query_database']
  [,[@attach_query_result_as_file=]attach_query_result_as_file]
  [,[@query_attachment_filename=]query_attachment_filename]
  [,[@query_result_header=]query_result_header]
  [,[@query_result_width=]query_result_width]
  [,[@query_result_separator=]'query_result_separator']
  [,[@exclude_query_output=]exclude_query_output]
  [,[@append_query_error=]append_query_error]
  [,[@query_no_truncate=]query_no_truncate]
  [,[@mailitem_id=]mailitem_id][output]正如你所見,這個存儲過程支持多個不同的參數。想獲取這些參考中每個參數的信息,請參考books online。
下面是我如何使用上面創建的私有個人資料來給我發送一封有關自動數據庫重索引過程方面的簡單的郵件消息的例子。
  execmsdb.dbo.sp_send_dbmail
  @profile_name='databaseadministrationprofile',
  @recipients='[email protected]',
  @body='reindexdatabaseprocesscompletedsuccessfully',
  @subject='reindexdatabase'; |||由于數據庫郵件是以隊列方式工作的,當我運行上面的命令時將得到一個“郵件已進入隊列”的通知郵件。當執行sp_send_dbmail存儲過程時郵件并不是立即被發送,而是存儲在msdb數據庫中的郵件隊列里。存儲過程的執行觸發一個外部郵件過程(databasemail90.exe)的運行。這個可執行程序讀入隊列中的郵件,把它發送到合適的郵件服務器上。
賬號和個人資料的其他用途
有很多不同的方式來利用數據庫郵件允許你建立的多個賬號和個人資料。
擁有多個賬號的一個明顯的優勢就是來配置你的數據庫郵件個人資料以防其中的一個smtp服務器出現故障。當添加賬號到數據庫郵件個人資料時你可以給它們一個序列號。當發送一個新的電子郵件消息時,數據庫郵件總是試著先用最低序列號發送。一旦那個賬號發送郵件失敗的話,數據庫郵件就會使用次低的序列號。數據庫郵件按這種方式工作直到郵件成功地發送出去或者所有的賬號都發送失敗。
擁有多個賬號和個人資料的另一個有價值的選擇是支持擁有不同電子郵件地址郵遞的郵件消息。如果你有多個應用需要發送郵件,現在每個應用都可以有它自己的電子郵件地址。這樣做有助于自動電子郵件的接收,僅僅看一下電子郵件地址就可區分什么過程發送了這個郵件。
最后,如果你使用私有個人資料的話,你可以把這些個人資料和不同安全原則聯系起來。這樣做使你能控制哪些msdb用戶被允許使用特定的數據庫郵件個人資料。
監控數據庫郵件
sql server在msdb數據庫里提供了6種不同的系統視圖來監控和返回數據庫郵件信息。這些視圖可以用來檢索msdb數據庫里有關所有數據庫郵件的狀態或者一個特定的電子郵件消息等信息。這些視圖用來鑒別哪些郵件被處理了,或者一些郵件消息為什么沒有被正確郵遞到需求的郵件服務器等方面是非常有用的。這些視圖是監控和解決數據庫郵件問題的很好的工具。想得到有關這些視圖的更多信息,請參考books online。
|||新聞熱點
疑難解答