SQL 2005配置發郵件
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)