下面的脚本演示,在 SQL Server 2005/2008 中,使用 Gmail 帐号配置数据库邮件功能
-- =================================================
-- 启用数据库邮件功能
-- =================================================
EXEC sys.sp_configure N'show advanced options', 1
RECONFIGURE;
EXEC sys.sp_configure 'Database Mail XPs', 1;
RECONFIGURE;
-- =================================================
-- 配置
-- =================================================
DECLARE
@account_name sysname,
@profile_name sysname;
SELECT
@account_name =N'GmailTest@gmail.com', -- 数据库邮件帐号
@profile_name = N'gmail'; -- 数据库邮件配置文件名
-- 数据库邮件帐号
EXEC msdb.dbo.sysmail_add_account_sp
@account_name = @account_name,
@email_address =N'GmailTest@gmail.com', -- Email 地址
@display_name = N'gmail test', -- 回复地址
@mailserver_name = N'smtp.gmail.com', -- Gmail smtp 服务器地址
@port = 25, -- 端口号(对于Gmail, 如果 25 不通则改用 456)
@username =N'GmailTest@gmail.com', -- Gmail 邮件地址
@password = N'abc.123', -- Gmail 邮件帐号密码
@use_default_credentials = 0,
@enable_ssl = 1; -- 启用SSL 通讯加密
-- 数据库邮件配置文件
EXEC msdb.dbo.sysmail_add_profile_sp
@profile_name = @profile_name;
-- 把数据库邮件帐号添加到邮件配置文件中
EXEC msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = @profile_name,
@account_name = @account_name,
@sequence_number = 1;
-- 授予任意用户使用数据库邮件配置文件的权限
EXEC msdb.dbo.sysmail_add_principalprofile_sp
@principal_name = N'guest',
@profile_name = @profile_name,
@is_default = 0;
-- =================================================
-- 发送邮件
-- =================================================
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profile_name,
@recipients =N'GmailTest@gmail.com', -- 收件人地址
@subject = N'test mail from database', -- 邮件主题
@body = N'this is a test mail'; -- 邮件内容
--6. 查看邮件发送情况:
use msdb
go
select * from sysmail_allitems
select * from sysmail_mailitems
select * from sysmail_event_log
-- =================================================
-- 删除配置
-- =================================================
/* --
DECLARE
@account_name sysname,
@profile_name sysname;
SELECT
@profile_name = N'gmail';
-- 从邮件配置文件中删除数据库邮件帐号
EXEC msdb.dbo.sysmail_delete_profileaccount_sp
@profile_name = @profile_name,
@account_name = @account_name;
-- 删除数据库邮件帐号
EXEC msdb.dbo.sysmail_delete_account_sp
@account_name = @account_name;
-- 删除数据库邮件配置文件
EXEC msdb.dbo.sysmail_delete_profile_sp
@profile_name = @profile_name;
-- 禁用数据库邮件功能
EXEC sys.sp_configure 'Database Mail XPs', 0;
RECONFIGURE;
EXEC sys.sp_configure N'show advanced options', 0
RECONFIGURE;
-- */
'
-- =================================================
-- 发送附件
-- =================================================
通过电子邮件发送文件附件的能力对工作效率来说是十分重要的。下面的脚本将会发送一封电子邮件,其中包含文件名为FileAttachment.txt的附件,给附件存储于我的C盘驱动器上。
你需要确保文件的存在,这样发送过程就不会发生错误。
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'chapman.tim@gmail.com',
@body='Message Body',
@subject ='Message Subject',
@profile_name ='Database-mailProfile',
@file_attachments ='C://FileAttachment.txt';
-- =================================================
-- 敏感度和重要性
-- =================================================
通常需要将一封邮件标记为敏感或重要,以使得收件人知道这些信息需要小心保护。下面的脚本将会发送一封邮件,敏感度为私人,重要性为高级。此外,脚本将会复制邮件地址yourname@yourdomain.com到信件中。
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'chapman.tim@gmail.com',
@body='Message Body',
@sensitivity ='Personal',
@importance ='High',
@copy_recipients='chapman.tim@gmail.com',
@subject ='Message Subject',
@profile_name ='Database-mailProfile';
-- =================================================
-- 查询结果
-- =================================================
拥有电子邮件发送能力的数据库引擎的一个重要特征是它可以让你向发送过程传递一个查询。在SQL Mail和Database Mail中都有该特性。Database Mail中的一个新特性是可以将查询结果作为附件,这一点在下面的脚本中展示。如果你不将查询结果作为一文件,那么它将被放置在邮件正文中。见列表B。
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'chapman.tim@gmail.com',
@body='Message Body',
@subject ='Message Subject',
@profile_name ='DatabaseMailProfile',
@query ='SELECT Product FROM sb2..SalesHistory GROUP BY Product HAVING COUNT(*) > 3',
@attach_query_result_as_file = 1,
@query_attachment_filename ='Results.txt'
HTML格式的信件
在数据库邮件中我最喜爱的新特征是可以将你的邮件格式化为HTML格式。简单看来,这没什么大不了的,但是这确实带来一些很好的可能性。在前面的例子中,你发送的查询结果包含在邮件正文中,因为该例子只包含一列数据,所以看起来没有什么不方便的。
但是,当在查询结果集中包含多个域时,格式化变得每况愈下。一个好消息是,可以很简单的使用SQL Server 2005中的一些XML和HTML新特征来格式化你的查询结果集,因此,可以很容易的在信件中查看查询结果。列表C中的脚本演示了如何利用查询结果发送一封XML/HTML格式的电子邮件。
DECLARE @xml NVARCHAR(MAX)DECLARE @body NVARCHAR(MAX)
SET @xml =CAST(( SELECT Product AS 'td','',SUM(SalePrice) AS 'td'
FROM SalesHistory GROUP BY Product FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
SET @body ='
Sales Reports
Product | SaleAmount |
---|
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'chapman.tim@gmail.com',@body= @body,@body_format ='HTML',@subject ='Message Subject',@profile_name ='DatabaseMailProfile'当你发送HTML格式的邮件时,允许你将查询结果嵌入到邮件的查询部分,从而可以将查询结果格式化成为更容易看的形式。(虽然,你可能会争论说我在信件中使用的黄色背景,看起来并不是很舒服。