在 SQL Server 2005 中配置数据库邮件

一、            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”,填写收件人地址(如:[email protected]),点击“发送……”出现下图:(注意:发送电子邮件后面的数字"16"是测试邮件的ID,可以通过此唯一ID在日志中查询该邮件的状态。)

或者您可以通过如下脚本来发送一封测试邮件:

exec msdb.dbo.sp_send_dbmail

@profile_name=‘ worklogmail ‘,

@recipients=‘[email protected]‘,

@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<[email protected]

left join ProjectWorkLog l on l.EffortState=1 and S_User.id=l.worker and l.workday<[email protected]

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 @[email protected]+‘您好:<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;‘[email protected]+‘截至到‘+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、新建作业-常规:

步骤:常规设置完成,点击【步骤】选项,点击【新建】按钮进入

点击【确认】返回,可以看到步骤中增加了一条。

计划:步骤设置完成,点击【计划】选项,点击【新建】按钮进入

点击【确认】返回。可以看到计划中增加了一条。

其它选项可以不设置。

点击【确认】完成计划任务的添加。

时间: 2024-08-06 10:38:17

在 SQL Server 2005 中配置数据库邮件的相关文章

SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail可以继续使用. SQLMail要求有应用程序编程接口(Extended Messaging Application Programming Interface,MAPI),安装新的Office时可能导致SQLMail失败. 数据库邮件更加安全.可靠,并且不需要MAPI.具有群集感知能力.可以自动重传发送失败的

在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)

问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (microsoft.sqlserver.smo) 原因:由于备份时,没有去掉默认的备份路径(C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\backup.bak),而又添加了一个新的路径,结果备份了两份,但它们之间彼此依赖,所以没有办法恢复

SQL Server 2005中设置Reporting Services发布web报表的匿名访问

原文:SQL Server 2005中设置Reporting Services发布web报表的匿名访问 一位朋友提出个问题:集成到SQL Server 2005中的Reporting Services已经将报表模板发布到IIS服务器,客户端通过浏览器访问时,默认会弹出Windows集成身份验证的对话框.如果在IIS配置里面把允许匿名(IUSR_**)访问的选项勾选,客户端再次访问的时候,会提示IUSR_** 访问权限不足.   对于这个问题,除了要设置IIS允许匿名访问外,还需要设置Report

SQL Server 2005中更改sa的用户名和密码

修改数据库SA账号名称的代码如下: 代码如下: Alter LOGIN sa DISABLE Alter LOGIN sa WITH NAME = [systemAccount] "systemAccount" 为SA的新名称,执行完成后刷新一下右侧登录名即可看到修改成功的账号名称. SQL Server 2005修改sa用户密码的方法图文版 一.修改SQL Server 2005中sa用户密码的方法 1. 点击"开始 - 所有程序 - Microsoft SQL Serve

实战SQL Server 2005镜像配置全过程

SQL Server 2005镜像配置基本概念 我理解的SQL Server 2005镜像配置实际上就是由三个服务器(也可以是同一服务器的三个 SQL 实例)组成的一个保证数据的环境,分别是:主服务器.从服务器.见证服务器. 主服务器:数据存放的地方 从服务器:数据备份的地方(即:主服务器的镜像) 见证服务器:动态调配主/从服务器的第三方服务器 环境介绍 首先介绍一下配置的环境: 本次配置使用的是三个独立的服务器(A.B.C三台电脑). A:主服务器,IP:192.168.0.2 B:从服务器,

PHP连接sql server 2005环境配置

一.Windows下PHP连接SQLServer 2005 设定:安装的Windows操作系统(Win7 或XP均可,其他系统暂未测试),在C盘下:PHP的相关文件位于c:/PHP下面,其配置文件php.ini位于C:\Windows下面. 连接前配置系统: 1.检查文件 php\ntwdblib.dll, 默认PHP的安装目录下面有一个,不能连接再替换. 下载正确版本的 ntwdblib.dll (2000.80.194.0) 2.配置php a.打开php.in将extension=php_

SQL Server 2005中的分区表(四):删除(合并)一个分区

在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里.具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1). 第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据. 第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据. 第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据. 第5个小表:2013-1-1(包含2013-1-

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?(转)

如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了. 1.数据库中某个表中的数据很多.很多是什么概念?一万条?两万条?还是十万条.一百万条?这个,我觉得是仁者见仁.智者见智的问题.当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了.如果非要我说一个数值的话,我认为是100万条. 2.但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失.只有你的数据是分段

SQL Server 2005中的分区表(五):添加一个分区(转)

所谓天下大事,分久必合,合久必分,对于分区表而言也一样.前面我们介绍过如何删除(合并)分区表中的一个分区,下面我们介绍一下如何为分区表添加一个分区. 为分区表添加一个分区,这种情况是时常会 发生的.比如,最初在数据库设计时,只预计了存放3年的数据,可是到了第4天怎么办?这样的话,我们就可以为分区表添加一个分区,让它把新的数据放在新的分区里.再比如,最初设计时,一个分区用于存放一年的数据,结果在使用的时候才发现,一年的数据太多,想将一个分区中的数据分为两个分区来存放. 遇到这种情况,就必须要为分区