SQL Server数据库邮件配置

时间:2021-05-15 21:18:43

一、数据库邮件介绍

数据库邮件是从SQL Server数据库引擎中发送电子邮件的企业解决方案,通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件。邮件中可以包含查询结果,还可以包含来自网络中任何资源的文件。

数据库邮件使用标准的简单传输协议(SMTP)发送邮件。发送邮件进程与SQL Server隔离,在后台采用异步方式传递,以避免了对SQL Server的影响。邮件通过配置文件进行发送,配置文件中包含了邮件账号的详细信息,可配置多个配置文件,每个配置文件可包行多个账户,实现故障转移。

默认下数据库邮件是禁用的,只有在调用的时候开启;若要发送数据库邮件,必须是msdb数据库中的databasemailuserrole数据库角色成员。同时数据库会对已经发送的邮件保留副本,可随时查询。支持HTML格式发送。

二、数据库邮件配置

1、前期准备

准备两个邮件账号:账号;发件服务器;端口[ 默认25 ]。

确保在此服务器能用这两个账号发送邮件,连接外网。

SQL Server数据库邮件配置

2、数据库邮件配置过程

右键—配置数据库邮件—进入数据库邮件配置向导—下一步

SQL Server数据库邮件配置

默认下一步

SQL Server数据库邮件配置

输入“配置文件名称”—输入“配置文件的用途”—添加—新建账户

SQL Server数据库邮件配置

输入邮件账户等—输入邮件服务器信息—端口默认为25即可

输入登录帐户和密码

SQL Server数据库邮件配置

确定后配置第二个账户

SQL Server数据库邮件配置

下一步

SQL Server数据库邮件配置

选择公共配置文件和默认配置文件

SQL Server数据库邮件配置

确定系统参数:默认下一步

SQL Server数据库邮件配置

确定配置信息,下一步

SQL Server数据库邮件配置

配置完成—关闭

SQL Server数据库邮件配置

3、开启Database Mail XPs配置

SP_CONFIGURE 'show advanced', 1

GO

RECONFIGURE

GO

SP_CONFIGURE 'Database Mail XPs', 1

GO

RECONFIGURE

GO

4、发送测试邮件

右键—发送测试邮件

SQL Server数据库邮件配置

也可通过存储过程发送测试邮件

USE msdb

GO

EXEC sp_send_dbmail

@profile_name='sqlmonitor',--配置文件名称

@recipients='test1@fzcyjh.com',--发送邮件账号

@subject='数据库邮件测试',--主题

@body='这是从HUANGCHUANHUI 上的数据库邮件发出的测试电子邮件。'--内容

三、扩展知识

1、数据库邮件的主要组件

数据库邮件配置和安全对象:1、配置文件;2、账户;3、配置存储过程[sp_send_dbmail]。邮件账户包含电子邮件服务器的信息,邮件账户密码信息等;配置文件是多个账户的集合;配置文件同时提供自动故障转移,为了增强安全性,配置文件可以是公共的,也可以是专用的;若是公共的配置文件,只要拥有databasemailuserrole角色的成员即可调用;若为专用的,只能是制定的数据库用户才能使用,需要sysadmin授权。

Msdb数据库:是数据库邮件主机数据库,包含数据库邮件的存储过程和消息处理对象,必须在msdb中启用Service Broker。不过数据库邮件不使用Service Broker网络。

外部执行程序DatabaseMail.exe:当有电子邮件要处理时,数据库邮件使用 Service Broker 激活来启动该外部程序。启动后,使用windows身份验证连接到SQL Server处理电子邮件;如果无法与SQL Server通信,则将记录在windows应用程序事件日志中。

2、数据库邮件发送基本过程

下图为数据库邮件基本体系结构

SQL Server数据库邮件配置

数据库邮件的设计基于使用 Service Broker 技术的排队体系结构。

当用户执行 sp_send_dbmail 时,存储过程将向邮件队列中插入一项,并创建一条包含该电子邮件信息的记录。

在邮件队列中插入新项将启动数据库邮件外部进程 (DatabaseMail.exe)。该外部进程会读取电子邮件的信息并将电子邮件发送到相应的一台或多台电子邮件服务器。发送后,该外部进程还会在状态队列中插入一项,来指示发送操作的结果。在状态队列中插入新项将启动内部存储过程,该过程将更新电子邮件信息的状态。

除存储已发送(或未发送)的电子邮件信息外,数据库邮件还在系统表中记录所有电子邮件的附件。

只有 msdb 数据库中的 DatabaseMailUserRole 的成员可以执行 sp_send_dbmail