gdufo

           

          SQL 2005配置發郵件


          http://www.sqlstudy.com/sql_article.php?id=2008072403

          SQL Server:在 SQL Server 2005 中配置數據庫郵件,發送郵件

          [作/譯者]:鵬城萬里    [日期]:2008-07-24    [來源]:本站原創    [查看]: 6343

          【鵬城萬里】 發表于 www.sqlstudy.com

          SQL Server:在 SQL Server 2005 中配置數據庫郵件。

          對于真正的 DBA 來說,數據庫郵件是必不可少的。 例如,數據庫發生了警報(alert), DBA 希望得到郵件通知,以便即時排除故障。 或者是監控數據庫作業(SQL Server Job)的運行狀況,當檢查到失敗的作業時, 就發送數據庫郵件報告給 DBA。

          在 SQL Server 2000 中 配置 “SQL Mail”,需要安裝 Outlook,配置過程比較麻煩。 在 SQL Server 2005 中配置 “Database Mail” 就相對容易多了。 主要是理清思路。

          SQL Server 并沒有內置郵件服務器(Mail Server), 它跟我們發送郵件一樣,需要用戶名和密碼通過 SMTP(Simple Message Transfer Protocol) 去連接郵件服務器。我們想讓 SQL Server 來發送郵件,首先要告訴它用戶名稱,密碼, 服務器地址,網絡傳送協議,郵件服務器的端口。。。等信息。這是通過 SQL Server 系統 存儲過程 sysmail_add_account_sp 來實現的。

          exec sysmail_add_account_sp 

          這樣,在 SQL Server 2005 中就添加了一個發送郵件的帳戶。 道理上講,有了這個郵件帳戶,SQL Server 就可以發送郵件了。 如:

          sp_send_dbmail @account_name = 'mail_account' 

          但是,SQL Server 考慮的更周全。試想:如果這個郵件帳戶發生故障 (比如:用戶密碼過期,或者郵件服務器宕機)那豈不是發送不了郵件了? 為了應對這種情況,SQL Server 2005 引入了 mail profile 這個東東。 一個 profile 中可以包含多個 account (郵件帳戶),這樣,SQL Server 發郵件的時候會依次嘗試 profile 中的多個郵件帳戶,如果發送成功,則退出, 否則,利用下一個郵件帳戶發送郵件。其中,添加 profile 和 在 account 和 profile 建立映射是通過下面兩個系統存儲過程實現的:

          sysmail_add_profile_sp sysmail_add_profileaccount_sp 

          這時候,SQL Server 發送郵件,就采用下面的方法了:

          sp_send_dbmail @profile_name = 'profile_name' 

          下面是具體的配置郵件步驟

          在 sa 系統帳戶下運行。

          1. 啟用 SQL Server 2005 郵件功能。

          use master go  exec sp_configure 'show advanced options',1 go  reconfigure go  exec sp_configure 'Database mail XPs',1 go  reconfigure go 

          2. 在 SQL Server 2005 中添加郵件帳戶(account)

          exec msdb..sysmail_add_account_sp         @account_name            = 'p.c.w.l'                 -- 郵件帳戶名稱(SQL Server 使用)        ,@email_address           = 'webmaster@sqlstudy.com'  -- 發件人郵件地址        ,@display_name            = null                      -- 發件人姓名        ,@replyto_address         = null        ,@description             = null        ,@mailserver_name         = '58.215.64.159'           -- 郵件服務器地址        ,@mailserver_type         = 'SMTP'                    -- 郵件協議(SQL 2005 只支持 SMTP)        ,@port                    = 25                        -- 郵件服務器端口        ,@username                = 'webmaster@sqlstudy.com'  -- 用戶名        ,@password                = 'xxxxxxxxx'               -- 密碼        ,@use_default_credentials = 0        ,@enable_ssl              = 0        ,@account_id              = null 

          3. 在 SQL Server 2005 中添加 profile

          exec msdb..sysmail_add_profile_sp @profile_name = 'dba_profile'      -- profile 名稱                                   ,@description  = 'dba mail profile' -- profile 描述                                   ,@profile_id   = null 

          4. 在 SQL Server 2005 中映射 account 和 profile

          exec msdb..sysmail_add_profileaccount_sp  @profile_name    = 'dba_profile' -- profile 名稱                                           ,@account_name    = 'p.c.w.l'     -- account 名稱                                           ,@sequence_number = 1             -- account 在 profile 中順序  

          5. 利用 SQL Server 2005 Database Mail 功能發送郵件。

          exec msdb..sp_send_dbmail @profile_name =  'dba_profile'               -- profile 名稱                           ,@recipients   =  'sqlstudy@163.com'          -- 收件人郵箱                           ,@subject      =  'SQL Server 2005 Mail Test' -- 郵件標題                           ,@body         =  'Hello Mail!'               -- 郵件內容                           ,@body_format  =  'TEXT'                      -- 郵件格式  

          6. 查看郵件發送情況:

          use msdb go  select * from sysmail_allitems select * from sysmail_mailitems select * from sysmail_event_log 

          如果不是以 sa 帳戶發送郵件,則可能會出現錯誤:

          Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1 EXECUTE permission denied on object 'sp_send_dbmail', database 'msdb', schema 'dbo'. 

          這是因為,當前 SQL Server 登陸帳戶(login),在 msdb 數據庫中沒有發送數據庫郵件的權限, 需要加入 msdb 數據庫用戶,并通過加入 sp_addrolemember 角色賦予權限。假設該SQL Server 登陸帳戶 名字為 “dba”

          use msdb go  create user dba for login dba go  exec dbo.sp_addrolemember @rolename   = 'DatabaseMailUserRole',                           @membername = 'dba' go 

          此時,再次發送數據庫郵件,仍可能有錯誤:

          Msg 14607, Level 16, State 1, Procedure sp_send_dbmail, Line 119 profile name is not valid 

          雖然,數據庫用戶 “dba” 已經在 msdb 中擁有發送郵件的權限了, 但這還不夠,他還需要有使用 profile:“dba_profile” 的權限。

          use msdb go  exec sysmail_add_principalprofile_sp  @principal_name = 'dba'                                      ,@profile_name   = 'dba_profile'                                      ,@is_default     = 1 

          從上面的參數 @is_default=1 可以看出,一個數據庫用戶可以在多個 mail profile 擁有發送權限。

          現在,可以利用 SQL Server 2005 發送數據庫郵件了吧。如仍有問題,請留言。

           

          posted on 2012-05-24 16:38 gdufo 閱讀(1129) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 霍城县| 汝阳县| 漠河县| 香港| 阳春市| 丽江市| 古交市| 望都县| 砀山县| 祁阳县| 哈密市| 洛宁县| 无为县| 江源县| 漳州市| 太谷县| 凌源市| 石河子市| 马公市| 白河县| 渝北区| 石城县| 无锡市| 天津市| 科技| 东安县| 馆陶县| 莲花县| 渭源县| 巴东县| 伽师县| 南靖县| 南漳县| 普兰县| 永州市| 长沙县| 遂溪县| 自贡市| 湛江市| 娄底市| 象州县|