在sql server 2005里出现了一种新的邮件子系统,叫做数据库邮件。数据库邮件比起早些sql server版本的sql邮件有很大改进。现在你可以建立多个账号和个人资料以满足你不同的应用电子邮件需求
本文将要讨论建立和管理数据库邮件。
什么是数据库邮件?
数据库邮件是一个邮件队列系统。电子邮件消息存储在msdb数据库里的队列中等待被处理。当一个电子邮件消息到达队列时,将会触发一个外部过程来把队列中的这个消息送到合适的邮件服务器端。邮件一旦被发送,一个装有邮递状态的电子邮件消息就会被邮递回sql server。
打开数据库邮件功能项
数据库邮件在模块之外是不可用的。由于sql server安全模型缺省把所有选项都关闭了,如果你要想使用它的话就需要使能数据库邮件。你可以使用表面区域配置工具,或者用下面的t-sql来使能数据库邮件:
sp_configure'showadvancedoptions',1;
go
reconfigure;
go
sp_configure'databasemailxps',1;
go
reconfigure
go
建立账号
数据库邮件账号鉴别sql server 2005应该如何和smtp服务器进行通信。这个账号具体说明了电子邮件如何被格式化和发送的。单一的账号将会鉴别单一的smtp服务器和认证方法。数据库邮件所使用的账号不和sql server登录账号相对应。
当建立一个账号时你需要鉴别足够的信息以便使sql server 2005能够和smtp服务器通讯,如果需要的话还要认证。可以参考books online获取定义账号的完整选项列表。你可以使用数据库邮件配置向导来建立账号,向导可以在sql server management studio里的“管理”文件夹“数据库邮件”下找到,或者使用存储过程(sp)“sysmail_add_account_sp”。这里有一个脚本使用了上面提到的存储过程来创建一个和不需要认证的smtp服务器相通信的账号。
||| executemsdb.dbo.sysmail_add_account_sp
@account_name='databaseadministrationaccount',
@description='mailaccountforusedbydbastaff',
@email_address='[email protected]',
@display_name='prodserver01dbamail',
@replyto_address='[email protected]',
@mailserver_name='mailserver.databasejournal.com';
这个账号名为“数据库管理账号”,邮件地址为[email protected]。使用数据库邮件的优点之一就是这个邮件地址不必再是你邮件系统中的一个有效的邮件账号。除此之外,你可以把回复地址和你的数据库邮件账号联系起来。在上面的例子中,我定义了[email protected]作为回复地址。所以现在,当某人从我的自动邮件通知处理得到一封邮件时,他们可以回复,这个回复邮件能直接发送到我这里。
有了数据库邮件,你就可以根据你的需要尽可能多地建立邮件账号。一会儿,我将讨论你需要建立多个数据库邮件账号的原因。
建立个人资料并和账号相联系
在能够发送数据库邮件到一个在账号中鉴别过的smtp服务器之前,你需要把账号和个人资料联系起来,把访问权授予个人资料。数据库邮件个人资料用来提高邮件安全性。有两种个人资料,公开的和私有的。公开的个人资料任何人都可见,它把访问权授予msdb数据库,是msdb数据库中databasemailuserrole中的成员,而私有的个人资料只可以被授权访问私有个人资料的特定用户使用。一个邮件个人资料能够和一个或多个账号相联系。你可以使用数据库邮件配置向导来管理个人资料,或者使用一些和下面类似的t-sql命令来建立邮件个人资料:
||| --createadatabasemailprofile
executemsdb.dbo.sysmail_add_profile_sp
@profile_name='databaseadministrationprofile',
@description='mailprofileforusebydbaprocesses';
这里我只是创建了一个名为“数据库管理个人资料”的个人资料。现在你仅仅有了一个刚创建的个人资料,并不意味着你能够使用它来发送邮件。你仍然需要把那个个人资料和至少一个数据库邮件账号及msdb数据库里的一个用户联系起来。为了做到这些我可以执行下面的语句:
--addtheaccounttotheprofile
executemsdb.dbo.sysmail_add_profileaccount_sp
@profile_name='databaseadministrationprofile',
@account_name='databaseadministrationaccount',
@sequence_number=1;
--grantaccesstotheprofile
executemsdb.dbo.sysmail_add_principalprofile_sp
@profile_name='databaseadministrationprofile',
@principal_name='prodserver01',
第一个execute语句把我的个人资料和一个账号相联系。第二个execute语句把我的个人资料和‘prodserver01’msdb数据库用户相联系。这个用户在他们能够发送邮件之前必须是databasemailuserrole中的成员。既然我把个人资料和一个特定用户联系起来,这个个人资料就是一个私有个人资料。要创建一个公共个人资料你需要把个人资料和“公共”数据库角色相联系。
发送数据库邮件
sql server提供了存储过程“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']
[,[@execute_query_database=]'execute_query_database']
[,[@attach_query_result_as_file=]attach_query_result_as_file]
[,[@query_attachment_filename=]query_attachment_filename]
[,[@query_result_header=]query_result_header]
[,[@query_result_width=]query_result_width]
[,[@query_result_separator=]'query_result_separator']
[,[@exclude_query_output=]exclude_query_output]
[,[@append_query_error=]append_query_error]
[,[@query_no_truncate=]query_no_truncate]
[,[@mailitem_id=]mailitem_id][output]
正如你所见,这个存储过程支持多个不同的参数。想获取这些参考中每个参数的信息,请参考books online。
下面是我如何使用上面创建的私有个人资料来给我发送一封有关自动数据库重索引过程方面的简单的邮件消息的例子。
execmsdb.dbo.sp_send_dbmail
@profile_name='databaseadministrationprofile',
@recipients='[email protected]',
@body='reindexdatabaseprocesscompletedsuccessfully',
@subject='reindexdatabase';
|||由于数据库邮件是以队列方式工作的,当我运行上面的命令时将得到一个“邮件已进入队列”的通知邮件。当执行sp_send_dbmail存储过程时邮件并不是立即被发送,而是存储在msdb数据库中的邮件队列里。存储过程的执行触发一个外部邮件过程(databasemail90.exe)的运行。这个可执行程序读入队列中的邮件,把它发送到合适的邮件服务器上。
账号和个人资料的其他用途
有很多不同的方式来利用数据库邮件允许你建立的多个账号和个人资料。
拥有多个账号的一个明显的优势就是来配置你的数据库邮件个人资料以防其中的一个smtp服务器出现故障。当添加账号到数据库邮件个人资料时你可以给它们一个序列号。当发送一个新的电子邮件消息时,数据库邮件总是试着先用最低序列号发送。一旦那个账号发送邮件失败的话,数据库邮件就会使用次低的序列号。数据库邮件按这种方式工作直到邮件成功地发送出去或者所有的账号都发送失败。
拥有多个账号和个人资料的另一个有价值的选择是支持拥有不同电子邮件地址邮递的邮件消息。如果你有多个应用需要发送邮件,现在每个应用都可以有它自己的电子邮件地址。这样做有助于自动电子邮件的接收,仅仅看一下电子邮件地址就可区分什么过程发送了这个邮件。
最后,如果你使用私有个人资料的话,你可以把这些个人资料和不同安全原则联系起来。这样做使你能控制哪些msdb用户被允许使用特定的数据库邮件个人资料。
监控数据库邮件
sql server在msdb数据库里提供了6种不同的系统视图来监控和返回数据库邮件信息。这些视图可以用来检索msdb数据库里有关所有数据库邮件的状态或者一个特定的电子邮件消息等信息。这些视图用来鉴别哪些邮件被处理了,或者一些邮件消息为什么没有被正确邮递到需求的邮件服务器等方面是非常有用的。这些视图是监控和解决数据库邮件问题的很好的工具。想得到有关这些视图的更多信息,请参考books online。
|||新闻热点
疑难解答