首页  ·  知识 ·  
通过脚本建立数据库邮件和SQL代理邮件
网友      编辑:德仔   图片来源:网络
SQL 2005和后面的版本都有这个新的选项来使用SMTP,从而可以从SQL Server发送邮件,这可以使用GUI或者脚本来建立。在这个技巧中,我将使用脚本通过一些步
SQL 2005和后面的版本都有这个新的选项来使用SMTP,从而可以从SQL Server发送邮件,这可以使用GUI或者脚本来建立。在这个技巧中,我将使用脚本通过一些步骤来建立它。
  下面将把整个脚本分成四部分,这样我可以解释每个部分是什么样的。整个脚本可以从这里下载http://www.mssqltips.com/tipimages2/1736_SetupDBMail.zip,我建议你使用它而不是把这些部分拼凑起来。
  部分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'
  SET @AdminEmail = 'klee@mydomain.com'
  SET @DomainName = '@mydomain.com'
  SET @replyToEmail = 'sqlserver@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
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读