SQL Server 2005技术数据库邮件使用方式

来源:互联网 发布:linux 部分中文乱码 编辑:程序博客网 时间:2024/04/30 09:24

 

         SQL Server 2005技术数据库邮件使用方式

SQL Server 2005数据库邮件是一种通过Microsoft SQL Server 2005数据库引擎发送电子邮件的企业解决方案。通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件。邮件中可以包含查询结果,还可以包含来自网络中任何资源的文件。数据库邮件旨在实现可靠性、灵活性、安全性和兼容性。

SQL Server外围应用配置器

为了安全,SQL Sever 2005采取功能集从小到大启动。默认情况下,数据库邮件处于非活动状态。若要使用数据库邮件,您必须使用SQL Server外围应用配置器工具或数据库邮件配置向导显示地启用数据库邮件。数据库管理员可以通过“SQL Server 2005外围应用配置器这一工具来实现这一过程。通过如图1的菜单可以打开这一工具:

1SQL Server外围应用配置器菜单

(注:Surface Acea Configuration for Features 译为功能的外围应用配置器)

2SQL Server 2005外围应用配置器界面

点击【Surface Acea Configuration for Features】,弹出功能的外围应用配置器主界面,如下图3

功能的外围应用配置器主界面

选择数据库邮件节点,选中启用数据库邮件存储过程,点击【确定】按钮,启动数据库邮件组件。

数据库邮件配置

打开Micorsoft SQL Server Management Studio,进入数据库管理界面。在对象资源管理器中展开管理节点,可以看到数据库邮件项,如下图4

4:管理数据库邮件

     选择数据库邮件,点击右键菜单中的配置数据库邮件(C)”菜单项,打开数据库邮件配置向导主界面,该向导的使用就不在本文档中详细描述,请参阅如下系列用户界面抓图。

5:数据库邮件配置向导-1 

选择 "管理数据库邮件 账户和配置文件"

6:数据库邮件配置向导-2 

创建新账户

7:数据库邮件配置向导-3 

8:数据库邮件配置向导-4 

9:数据库邮件配置向导-5 

 

 

技术特性说明

     在所有的SQL Server 2005版本中,Express Edition 中未提供数据库邮件。

可靠性

无需 Microsoft Outlook 或扩展消息处理应用程序编程接口(扩展 MAPI)。数据库邮件使用标准的简单邮件传输协议 (SMTP) 发送邮件。无须在运行 SQL Server 的计算机上安装扩展 MAPI 客户端便可以使用数据库邮件。

进程隔离。若要最大程度上减小对 SQL Server 的影响,传递电子邮件的组件必须在 SQL Server 外围的单独进程中运行。即使外部进程停止或失败,SQL Server 也会继续对电子邮件进行排队。队列中的邮件将在外部进程或 SMTP 服务器联机时发送。

故障转移帐户。数据库邮件配置文件允许您指定多台 SMTP 服务器。如果一台 SMTP 服务器不可用,还可以将邮件传递至其他的 SMTP 服务器。

群集支持。数据库邮件与群集兼容,并且可以完全用于群集中。

灵活性

后台传递。数据库邮件提供后台(或异步)传递。调用 sp_send_dbmail 发送消息时,数据库邮件可以向 Service Broker 队列中添加请求。存储过程将立即返回。外部电子邮件组件将接收请求并传递电子邮件。

多个配置文件。数据库邮件允许您在一个 SQL Server 实例中创建多个配置文件。另外,您也可以选择发送邮件时数据库邮件使用的配置文件。

多个帐户。每个配置文件都可以包含多个故障转移帐户。您可以配置包含不同帐户的不同配置文件以跨多台电子邮件服务器分发电子邮件。

64 位兼容性。数据库邮件完全可以用于采用 64 位安装的 SQL Server 2005

安全性

默认为关闭。为了减少 SQL Server 的外围应用,默认情况下,禁用数据库邮件存储过程。若要启用数据库邮件存储过程,请使用 SQL Server 外围应用配置器工具。

10 您必须是 msdb 数据库中的 DatabaseMailUserRole 数据库角色的成员,才能发送数据库邮件。

11 配置文件安全性。数据库邮件增强了邮件配置文件的安全性。您可以选择对数据库邮件配置文件具有访问权限的 msdb 数据库用户或组,并可以为 msdb 中的任一特定用户或所有用户授予访问权限。专用配置文件用于限制指定用户的访问权限。公共配置文件可供数据库中的所有用户使用。

12 附件大小调控器。数据库邮件增强了对附件文件大小的可配置限制。

13 禁止的文件扩展名。数据库邮件维护一个禁止的文件扩展名列表。用户无法附加扩展名为列表中某个扩展名的文件。

兼容性

14 集成配置。数据库邮件在 SQL Server 数据库引擎中维护电子邮件帐户的信息。无需在外部客户端应用程序中管理邮件配置文件。数据库邮件配置向导提供了十分方便的界面来配置数据库邮件。您还可以使用 Transact-SQL 创建并维护数据库邮件的配置。

15 日志记录。数据库邮件将电子邮件活动记录到 SQL ServerMicrosoft Windows 应用程序事件日志和 msdb 数据库的表中。

16 审核。数据库邮件将发送的邮件和附件的副本保留在 msdb 数据库中。您可以轻松地审核数据库邮件的使用情况并检查保留的邮件。

17 支持 HTML。数据库邮件允许您以 HTML 格式发送电子邮件。

sp_send_dbmail系统存储过程

     在SQL Server Management Studio对象资源管理器的数据库 系统数据库 msdb 可编程存储过程 系统存储过程中找到sp_send_dbmail存储过程,大家可以阅读该存储过程的源代码,研究其实现机制。

 

sp_send_dbmail的使用

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' ]

... ...



在使用sp_send_dbmail时要注意以下几点:

在使用sp_send_dbmail前,一定要使用数据库邮件配置向导“SQL Server外围应用配置器工具或sp_configure启用数据库邮件。

Sysmail_stop_sp通过停止外部程序使用的Service Broker对象来停止数据库邮件。使用sysmail_stop_sp停止数据库邮件后,sp_send_dbmail仍然会接收邮件。若要启动数据库邮件,请使用sysmail_start_sp

如果未指定@profilesp_send_dbmail会使用默认配置文件。如果发送电子邮件的用户具有默认专用配置文件,则数据库邮件使用该配置文件。如果该用户没有默认的专用配置文件,则sp_send_dbmail将使用默认的公共配置文件。如果用户没有默认的专用配置文件和默认的公共配置文件,则sp_send_dbmail将返回错误

sp_send_dbmail 不支持没有任何内容的电子邮件。 若要发送电子邮件,至少必须指定 @body@query@file_attachments 或 @subject 之一。 否则,sp_send_dbmail 会返回错误。

数据库邮件使用当前用户的 Microsoft Windows 安全上下文控制对文件的访问。 因此,经过 SQL Server 身份验证的用户无法使用 @file_attachments 附加文件。 Windows 不允许 SQL Server 从一台远程计算机向另一台远程计算机提供凭据。 所以,如果从运行 SQL Server 的计算机以外的计算机运行该命令,则数据库邮件可能无法从网络共享附加文件。

如果已同时指定 @query 和 @file_attachments 且未找到文件,则查询仍然会执行,但是不会发送电子邮件。

指定查询后,结果集的格式被设置为内联文本。 使用十六进制格式发送结果中的二进制数据。

参数 @recipients@copy_recipients 和 @blind_copy_recipients 是以分号分隔的电子邮件地址列表。 至少必须提供以上参数之一,否则 sp_send_dbmail 会返回错误。

在没有事务上下文的情况下执行 sp_send_dbmail 时,数据库邮件将启动并提交隐式事务。 从现有事务内执行 sp_send_dbmail 时,数据库邮件将依赖用户提交或回滚任何更改。 它不会启动内部事务。

10 默认情况下,msdb 数据库中的 DatabaseMailUser 数据库角色的所有成员对 sp_send_dbmail 都有执行权限。 不过,如果发送邮件的用户不具有使用该请求的配置文件的权限,sp_send_dbmail 会返回错误且不发送该邮件。

实例:

发送HTML电子邮件(推荐此方式)

EXEC MSDB.DBO.SP_SEND_DBMAIL 

@profile_name='BQSAP', 

@RECIPIENTS=@RECIPIENTS, 

@COPY_RECIPIENTS='FANY.WEI@QISDA.COM;,

@SUBJECT=@SUBJECTDATA, 

@BODY=@BODYDATA,

@BODY_FORMAT='HTML'

发送包含查询结果的电子邮件

执行查询。数据库邮件将该结果附加为文本文件。

EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'BQSAP',

@recipients = @RECIPIENTS,

@query = 'select * from ServerMonitor.dbo.CounterDetails where counterid=8' ,

@subject = 'Student Information',

@attach_query_result_as_file = 1 ;