SQL 2005和后面的版本都有这个新的选项来使用SMTP,从而可以从SQL Server发送邮件,这可以使用GUI或者脚本来建立。在这个技巧中,我将使用脚本通过一些步骤来建立它。
部分1 – 声明和设置值
在你运行这个脚本之前,你需要填写你环境的一些信息。需要设置的四个值是:
@SMTPServer – 你需要获得你想用来发送邮件的SMTP服务器。
@AdminEmail – 在创建之后,这个脚本将把测试邮件发送到这个邮件地址。
@DomainName – 这是SQL Server邮件名称的一部分。
@replyToEmail – 这是当你收到邮件时你要回复的邮件。
use master
DECLARE @SMTPServer VARCHAR(100)
DECLARE @AdminEmail VARCHAR(100)
DECLARE @DomainName VARCHAR(100)
DECLARE @replyToEmail VARCHAR(100)
SET @SMTPServer = 'smtp.mydomain.com'
部分2 – 更改全局配置设置
为了建立数据库邮件和SQL代理邮件,你需要激活两个全局配置设置。
exec sp_configure 'show advanced options', 1
exec sp_configure 'Database Mail XPs', 1
exec sp_configure 'Agent XPs',1
RECONFIGURE WITH OVERRIDE
部分3 - 数据库邮件配置
这将建立数据库邮件。它不要求SQL Server服务重启。在脚本末尾,它将发送一封测试邮件。
为数据库邮件而配置的邮件地址基于服务器名称。因此,如果你的服务器名称是"ProdServer1"并且你的域是"MyDomain.com",那么这个脚本创建的邮件地址是
ProdServer1@MyDomain.com。如果你希望有些东西不同,那么你需要修改这个脚本。
这里的邮件服务器也使用"anonymous authentication"。如果你想提供其它的参数,那么可以看看这些系统存储过程sysmail_add_account_sp, sysmail_add_profile_sp, sysmail_add_profileaccount_sp和sysmail_add_principalprofile_sp。
declare @servername varchar(100)
declare @email_address varchar(100)
declare @display_name varchar(100)
declare @testmsg varchar(100)
set @servername = replace(@@servername,'\','_')
set @email_address = @servername + @DomainName
set @display_name = 'MSSQL - ' + @servername
set @testmsg = 'Test from ' + @servername
IF EXISTS(SELECT * from msdb.dbo.sysmail_profile)
PRINT 'DB mail already configured'
ELSE
BEGIN
--Create database mail account.
exec msdb.dbo.sysmail_add_account_sp
@Account_name = 'SQLMail Account'
, @description = 'Mail account for use by all database users.'
, @email_address = @email_address
, @replyto_address = @replyToEmail
, @display_name = @display_name
, @mailserver_name = @SMTPServer
--Create global mail profile.
exec msdb.dbo.sysmail_add_profile_sp
@profile_name = 'SQLMail Profile'
, @description = 'Mail profile setup for email from this SQL Server'
--Add the account to the profile.
exec msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'SQLMail Profile'
, @Account_name = 'SQLMail Account'
, @sequence_number=1
--grant access to the profile to all users in the msdb database
use msdb
exec msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'SQLMail Profile'
, @principal_name = 'public'
, @is_default = 1
END
--send a test message.
exec msdb..sp_send_dbmail
@profile_name = 'SQLMail Profile',
@recipients = @AdminEmail,
@subject = @testmsg,
@body = @testmsg
EXEC msdb.dbo.sysmail_help_profile_sp
部分4 – SQL代理邮件配置
一旦创建了数据库邮件,你就可以启用SQL代理通知。要使它生效,你需要重新启动SQL代理服务。
为了从SQL代理发送邮件,你需要配置警报系统。下面的脚本可以实现这个过程。在这里,我们使用扩展存储过程"xp_instance_regwrite"来写两个值到注册表中。第一个设置只告诉SQL代理警报系统使用数据库邮件作为邮件选项,第二个设置告诉SQL警报系统设置哪个邮件文件。值"SQLMail Profile"是部分3给定的名称。
-- Enabling SQL Agent notification
USE [msdb]
EXEC msdb.dbo.sp_set_sqlagent_properties
@email_save_in_sent_folder=1
EXEC master.dbo.xp_instance_regwrite
N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
, N'UseDatabaseMail'
, N'REG_DWORD'
, 1
EXEC master.dbo.xp_instance_regwrite
N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
, N'DatabaseMailProfile'
, N'REG_SZ'
, N'SQLMail Profile'
提到SQL Server相关的任务,你可以通过脚本来自动执行很多事情。如果你需要重复做这些事情并且确保它们连续,那么这么做可以节省很多时间。
本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow