数据库邮件服务使用说明
1 概述
数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方案。通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件。邮件中可以包含查询结果,还可以包含来自网络中任何资源的文件。数据库邮件旨在实现可靠性、灵活性、安全性和兼容性。
安全说明: |
默认情况下,数据库邮件处于非活动状态。要使用数据库邮件,必须使用数据库邮件配置向导、sp_configure 存储过程或者基于策略的管理的外围应用配置功能显式地启用数据库邮件。 |
2 启用数据库邮件服务
2.1 使用向导安装配置数据库邮件
数据库邮件配置向导执行下列任务:
安装数据库邮件。
管理数据库邮件帐户和配置文件。
管理配置文件安全性。
查看或更改系统参数。
操作方法: 选择数据库实例,在“管理-> 数据库邮件”双击进行配置
选择第一项进行安装数据库邮件
注意: |
在任何数据库中启用 SQL Server Service Broker 都需要数据库锁。如果在 msdb 中停用了 Service Broker,则若要启用数据库邮件,应首先停止 SQL Server 代理,以使 Service Broker 可以获取所需的锁。 |
2.2 建立邮件配置文件
给配置文件一个合适的名字
添加SMTP账号(要确保SQL SERVER能连接到邮件服务器,安需要选择SSL连接)
2.3 指定配置文件安全性。
3 增加SQL代理操作员
新建一个这机器的邮件接收
4 配置SQL 代理警报系统
查看SQL Server 代理的属性,配置警报系统(这一步要重启代理才能生效)。
5 更新作业配置
为作业的通知属性选择一个电子邮件(第2步的建立的操作员),按需要选择是作业完成时发送邮件,还是只在失败时发送邮件。
6 注意事项
服务器要配置 邮件服务器 的路由
防火墙开通邮件服务SMTP (25) 端口
7 SQL 邮件存储过程
以下脚本可以为你的服务器配置好数据库邮件,并增加操作员。
USE [msdb]
GO
print '开启数据库邮件服务选项'
exec sp_configure 'Database Mail XPs' , 1
RECONFIGURE
print '启动数据库邮件服务'
exec sysmail_start_sp
go
print '开始配置数据库邮件'
DECLARE @account_id int , @profile_id int , @rc int
print '创建一个新的数据库邮件帐户,用于保存有关SMTP 帐户的信息。'
exec @rc = msdb . dbo . sysmail_add_account_sp @account_name = ' Project _dbagent' ,
@email_address = ' Project _dbagent@ 163.com ' ,
@display_name = ' Project _DbAgent mail' ,
@replyto_address = ' Project _DbAgent@ 163.com ' ,
@description = '数据库代理作业管理员' ,
@mailserver_name = ' mail.163.com ' ,
@mailserver_type = 'SMTP' , -- 区分大小写,只能填这个
@port = 25 ,
@username = ' Project _dbagent' ,
@password = ' Project job' ,
@use_default_credentials = 0 ,
@enable_ssl = 0 ,
@account_id = @account_id OUTPUT
select 'sysmail_add_account_sp' as name , @rc as [@rc] , @account_id as [@account_id]
print '创建新的数据库邮件配置文件。'
exec @rc = msdb . dbo . sysmail_add_profile_sp @profile_name = '数据库代理作业报告邮件配置' ,
@description = '数据库代理作业报告邮件配置' ,
@profile_id = @profile_id OUTPUT
select 'sysmail_add_profile_sp' as name , @rc as [@rc] , @profile_id as [@profile_id]
print '在数据库邮件配置文件中添加一个数据库邮件帐户。'
exec @rc = msdb . dbo . sysmail_add_profileaccount_sp
@profile_id = @profile_id , @account_id = @account_id , @sequence_number = 1
select 'sysmail_add_profileaccount_sp' as name , @rc as [@rc]
print '创建数据库代理的操作员,这里@email_address 要改为接收作业报告邮件的邮箱!'
EXEC msdb . dbo . sp_add_operator @name = N' Project _DbAgent' ,
@enabled = 1 ,
@weekday_pager_start_time = 0 ,
@weekday_pager_end_time = 235959 ,
@saturday_pager_start_time = 0 ,
@saturday_pager_end_time = 235959 ,
@sunday_pager_start_time = 0 ,
@sunday_pager_end_time = 235959 ,
@pager_days = 127 ,
@email_address = N' Project _DbAgent@ 163.com ' ,
@pager_address = N' Project _DbAgent@ 163.com '
--,@category_name=N'[DBA]'
if @@error != 0
print '数据库邮件配置完成!'
else
print '数据库邮件配置失败!'
GO
print '发送测试邮件!'
EXEC msdb . dbo . sp_send_dbmail
@profile_name = '数据库代理作业报告邮件配置' ,
@recipients = ' Project _dbagent@ 163.com ' ,
@body = '我的测试' ,
@subject = '数据库代理作业报告邮件配置测试'
--@attach_query_result_as_file = 1 ;
print ' 为SQL代理配置邮件服务 !'
EXEC master . dbo . xp_instance_regwrite N'HKEY_LOCAL_MACHINE' , N'SOFTWARE/Microsoft/MSSQLServer/SQLServerAgent' , N'DatabaseMailProfile' , N'REG_SZ' , N'开发测试邮件配置'
GO
-- 配置完成后,就可以为已有的作业配置邮件服务了。
USE [msdb]
GO
USE [msdb]
GO
-- 更新指定作业的警告选项
EXEC msdb . dbo . sp_update_job @job_name = N'xxxx' ,
@notify_level_email = 3 ,
@notify_level_netsend = 2 ,
@notify_level_page = 2 ,
@notify_email_operator_name = N' Project _DbAgent'
8 邮件发送问题解答
8.1 如何测试我的数据库邮件配置
选择数据库实例,在“管理-> 数据库邮件”,点右键菜单,选择发送测试电子邮件。
8.2 尚未建立电子邮件会话就试图发送电子邮件
问题: 表现为没有收到邮件,在作业历史记录中,消息包含 “注意: 无法通过电子邮件通知XXX”。
分析: 先查看代理的错误日志和数据库邮件日志。
agent错误日志为“尚未建立电子邮件会话就试图发送电子邮件”
解决方法:
重启SQL代理,使邮件配置生效。
8.3 由于邮件服务器故障,无法将邮件发送给收件人。
问题: 表现为没有收到邮件,在作业历史记录中,消息包含 “注意: 无法通过电子邮件通知XXX”。
分析: 先查看代理的错误日志和数据库邮件日志。
数据库邮件日志为“由于邮件服务器故障,无法将邮件发送给收件人。 (使用帐户 2 (2009-05-15T11:19:14) 发送邮件。 异常邮件: 无法连接到邮件服务器。 (不知道这样的主机。)。”
这是SQL Server 没有能连接到邮件服务器
解决方法:
检查路由、防火墙配置。
8.4 协议不支持发送邮件。
问题: 表现为没有收到邮件,在作业历史记录中,消息包含 “注意: 无法通过电子邮件通知XXX”。
分析: 先查看代理的错误日志和数据库邮件日志。
数据库邮件日志为“协议不支持发送邮件。”
这是数据库邮件服务没有配置好。(用存储过程加邮件账号时,没有把 @mailserver_type 设置为 'SMTP' [ 区分大小写]。 )
解决方法:
删除原有账号后重新配置。