在 SQL Server 2005 中配置資料庫郵件

weixin_34067049發表於2016-11-28

一、            SQL Server發郵件原理和元件介紹:

資料庫郵件有4個元件:配置檔案、郵件處理元件、可執行檔案以及“日誌記錄和稽核元件”。

l  配置元件包括:

1)資料庫郵件帳戶包含諸如SMTP伺服器名、身份驗證型別和電子郵件地址等。

2)資料庫郵件配置檔案是資料庫郵件帳戶的集合。

l  郵件處理元件

要的資料庫郵件元件就是剛才所說的資料庫郵件主機資料庫,預設是msdb。

l  資料庫郵件可執行檔案

資料庫郵件使用一個外部可執行檔案來處理郵件,降低了對SQL Server的影響。當有郵件要處理時,資料庫郵件使用Service Broker啟用外部程式(DataMail90.exe)傳送郵件。

l  日誌記錄和稽核元件

可以通過資料庫郵件日誌或查詢sysmail_log系統檢視來檢視相關日誌記錄。

 

跟我們傳送郵件一樣,需要使用者名稱和密碼通過 SMTP(Simple Message Transfer Protocol) 去連線郵件伺服器。我們想讓SQL Server 來傳送郵件,首先要告訴它使用者名稱稱,密碼, 伺服器地址,網路傳送協議,郵件伺服器的埠。。。等資訊

二、            啟用 SQL Server 2005 郵件功能

方法1:開啟Sql Server外圍應用配置器:

 

點選【功能外圍應用配置】,在開啟的頁面中選擇“資料庫郵件”,選中“啟用資料庫郵件儲存過程”

 

方法2:執行啟用語句

use master
go

exec sp_configure 'show advanced options',1
go

reconfigure
go

exec sp_configure 'Database mail XPs',1
go

reconfigure
go

 

三、            啟用資料庫郵件主機資料庫上的service broker

預設的資料庫主機資料庫是msdb,其service broker預設是啟用的。您可以通過如下指令碼來檢視msdb是否啟用了Service Broker:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'

如果未啟用,則返回“0”,如果啟用,則返回1.你可以通過下面指令碼來啟用Service Broker:

ALTER DATABASE msdb SET ENABLE_BROKER

 

四、            配置資料庫郵件

1)開啟SSMS(SQL Server Management Studio),在物件瀏覽器中依次展開伺服器、管理節點,在資料庫郵件上點選右鍵,如圖:

 

2)選擇“配置資料庫郵件”,將出現“資料庫郵件配置嚮導”對話方塊。如圖: 

 

 

3)點選“下一步”,如果資料庫郵件尚未啟動,則彈出一個對話方塊,詢問是否啟用資料庫郵件,選擇“是”。 

4)在“配置檔名”文字框中輸入“worklogmial”,並單擊“新增”以加入一個SMTP帳戶。

5)在“新建資料庫郵件帳戶”對話方塊中,輸入相關資訊,確定。

 

    6)點選下一步,在“管理配置檔案安全性”頁面上將“worklogmial”配置為公共配置檔案,並單擊下一步。

7)這時將出現“配置引數”頁面,我們保持預設,單擊下一步,再單擊完成。

 

五、            傳送測試郵件

1)再次右鍵物件瀏覽器中的“資料庫郵件”節點,選擇“傳送測試電子郵件”,出現如下:

2)在資料配置檔案的下拉框中選擇我們剛才建立的“worklogmail”,填寫收件人地址(如:jsyhello@gmail.com),點選“傳送……”出現下圖:(注意:傳送電子郵件後面的數字"16"是測試郵件的ID,可以通過此唯一ID在日誌中查詢該郵件的狀態。)

 

或者您可以通過如下指令碼來傳送一封測試郵件:

exec msdb.dbo.sp_send_dbmail

@profile_name=' worklogmail ',

@recipients='jsyhello@gmail.com',

@body='這是一封測試郵件',

@subject='測試'

 

六、            常見問題

1)ExternalMailQueue 接收到無效的 XML 訊息格式。conversation_handle……

解決:至少為SQL Server安裝SP1

2)由於郵件伺服器故障,無法將郵件傳送給收件人。 (使用帳戶 1 (2007-12-06T10:08:32) 傳送郵件。 異常郵件: 無法將郵件傳送到郵件伺服器。 (不允許使用郵箱名稱。 伺服器響應為: You are not authorized to send mail, authentication is required)。

解決:你的SMTP郵件伺服器要求認證,而你沒有提供正確的帳戶密碼或者是錯誤地選擇了匿名身份認證。

3)使用帳戶 1 (2007-12-06T11:17:08) 傳送郵件。 異常郵件: 無法將郵件傳送到郵件伺服器。 (不是本地使用者;請嘗試不同的路徑。伺服器響應為: auth error.)。

解決:部分免費的公共郵箱的SMTP伺服器不允許此項服務,請選擇其他的SMTP。

七、            建立傳送郵件的儲存過程

--傳送郵件模板儲存過程

Create PROCEDURE [dbo].[MyMail]

@mailto varchar(max),

@mailsubject nvarchar(255),

@mailbody nvarchar(max)

AS

BEGIN

set @mailbody=replace(replace(@mailbody,'&lt;','<'),'&gt;','>')

+N'<br/>謝謝!<br/>祝您工作愉快!<br/>發件人:研發管理平臺'

 

exec msdb.dbo.sp_send_dbmail

@profile_name = 'worklogmail',

@recipients = @mailto,

@subject = @mailsubject,

@body = @mailbody,

@body_format = 'HTML'

END

 

--日誌提醒儲存過程

Create proc [dbo].[MailUnWirte]

@days int=2

as

if EXISTS(select * from WorkWeek where datediff(day,WorkDay,getdate())=0 and Iflag=1)

begin

declare @calcDate datetime

select @calcDate=max(workday) from WorkWeek where datediff(day,WorkDay,getdate())>@days and Iflag=1

 

declare @username varchar(50)

declare @mailto varchar(max)

    declare @depid varchar(20)

declare @mailbody nvarchar(max)

declare mailto cursor for

select S_User.Name,S_User.EMail,S_user.DepID

from S_User

inner join s_UserTransfer ut on ut.userid=S_User.id and ut.StartDate<=@calcDate

left join ProjectWorkLog l on l.EffortState=1 and S_User.id=l.worker and l.workday<=@calcDate

where S_User.Iflag='1' and S_User.IsEffort=1

group by S_User.Name,S_User.EMail,S_user.DepID

having isnull(sum(l.Effort),0)<8

 

  • open mailto

fetch next from mailto into @username,@mailto,@depid

while @@fetch_status=0

begin

set @mailbody=@username+'您好:<br/>&nbsp;&nbsp;&nbsp;&nbsp;您截至到'+convert(varchar(10),@calcDate,20)+',尚有工作日誌未填寫完畢,請儘快填寫'

exec MyMail @mailto,N'日誌未填寫提醒',@mailbody

select @mailto=isnull(email,'') from s_user inner join s_dep on s_dep.Manager=s_user.id where s_dep.id=depid

        if @mailto!=''

begin

set @mailbody='您好:<br/>&nbsp;&nbsp;&nbsp;&nbsp;'+@username+'截至到'+convert(varchar(10),@calcDate,20)+',尚有工作日誌未填寫完畢,請督促其按時填寫'

exec MyMail @mailto,N'日誌未填寫提醒',@mailbody

        end

fetch next from mailto into @username,@mailto,@depid

end

close mailto

deallocate mailto

end

 

八、            配置計劃任務

1、新建作業

 

2、新建作業-常規:

 

步驟:常規設定完成,點選【步驟】選項,點選【新建】按鈕進入

 

點選【確認】返回,可以看到步驟中增加了一條。

 

計劃:步驟設定完成,點選【計劃】選項,點選【新建】按鈕進入

 

點選【確認】返回。可以看到計劃中增加了一條。

 

其它選項可以不設定。

 

點選【確認】完成計劃任務的新增。

 

相關文章