Database Mail代替了SQL Mail,它使用一个简单邮件传输协议(SMTP)服务器,而不是SQL Mail所要求的MAPI账号来发送电子邮件。 这允许你的组织发送带附件和查询结果的电子邮件,附加查询结果,以及格式化HTML电子邮件。你还可以用它设定许多其它配置,而不需要你拥有一台Exchange服务器或配置任何类型的MAPI工作区。 使用Database Mail的好处除完全以SMTP为基础外,Database Mail还具有许多其它优点:
它在数据库引擎以外运行,因此对数据库引擎的压力最小。
它支持群集,完全支持群集环境。
它的用户资料(Profile)允许使用冗余SMTP服务器。(我将在本文后部分详细讨论这一点。)
它允许你以参数的形式向存储过程发送查询文本,存储过程将执行查询并在电子邮件中发送结果。
消息通过一个Service Broker队列异步传送,因此你在发送电子邮件时不必等待回应。 它为电子邮件发送提供多重安全保护,如一个控制附件扩展名的过滤器和一个附件大小管理器。 建立和使用Database Mail在建立一个Database Mail解决方案前,你需要进行一些规划工作。首先,你必须具有一台有效的SMTP服务器来传送电子邮件。如果你没有SMTP服务器,请参阅微软知识库文章308161了解建立SMTP服务器的相关信息。如果你无法确定组织是否拥有SMTP服务器,询问你的网络管理员获得机器名称或服务器的IP地址。你的网络管理员可能需要对服务器进行配置,以便SQL Server能够发送电子邮件。 在Database Mail中,账户(Account)保存数据库引擎用来发送电子邮件消息的信息。一个账户只为一台电子邮件服务器保存信息,如账户名、电子邮件地址、回复电子邮件地址、服务器名称或IP地址,以及一些可选的安全设置。 要发送一封Database Mail电子邮件,必须使用一个用户资料(Profile)。用户资料为一个或几个账户设立。这种用户资料-账户设置非常有用。它允许你将几个账户和一个用户资料联系起来,这意味着你可以将几台电子邮件服务器和一个用户资料联系起来。 因此,当你试图发送一封电子邮件时,系统会尝试用户资料中的每个账户,直到消息被成功发送出去。如果一台或几台SMTP服务器出现故障,这种设置就十分有用。它还允许你开发发送电子邮件的应用程序代码,而不必担心针对不同的环境修改Profile名称。你可以在开发和生产环境中使用相同的Profile名称,唯一的差别在于用户资料中包含的账户有所不同。 该是时候了解如何建立一个Database Mail账户了。在我们的例子中,我假设你正坐在一台你具有系统管理员访问权限的开发机器前。如果你没有系统管理员权限,你需要成为msdb数据库DatabaseMailUserRole的一员。 下面的脚本建立一些我在整个实例中都要用到的变量。
2. SQL Server中如何配置数据库邮件
SQL Server中的数据库邮件功能可以实现自动发送邮件,这个功能在实际的项目中非常的有用。那么如何配置SQLServer的数据库邮件功能呢?下面我给大家分享一下。
工具/材料
SQLServer Managment
首先打开数据库的管理文件夹,然后右键单击数据库邮件选项,选择配置数据库邮件,如下图所示
接下来会弹出数迹拆据库邮件配置向导界面,这里直接点击下一步即可,如下图所示
然后需要选择配置任务,这里我们选择第一个选项即可,如果已经配置过数据库邮件的话则可以选择第二个选项,如下图所示
接下来在新建配置文件界面中给配置文件起一个名字,然后点击添加按钮,如下图所示
然后会进入新建数据库邮件账户界面,在这个界面中需要配置邮件服务器的地址以及端口,如下图所示
添加好邮件账户以后回到配置文件界面,这个时候新添加的邮件账户就在账户列表中了,然后点姿灶枣击下一步,如下图所示
接下辩亮来进入管理配置文件安全性的界面,我们勾选配置文件,然后点击下一步即可,如下图所示
然后需要进行系统参数的配置,这里大家根据自己的需要配置即可,如果没有特殊要求直接默认即可,如下图所示
接下来SQL Server会把刚才的配置都列举出来,我们检查一下,没有问题的话直接点击完成即可,如下图所示
最后我们打开数据库邮件的发送界面,用刚才配置好的数据库邮件发送一封测试邮件试试,如果正常发送则证明配置没问题
3. SQL 2008 R2 数据库邮件正常 报表订阅无法发送邮件
我的理解是你发送邮件订阅报错了,是吧,
这种错误通常当 SMTP 服务器上的安全策略设置仅允许经过身份验证的用户提交邮件以进行后续传递时,会出现此错误。如果 SMTP 服务器不接受匿名用户的电子邮件提交,则请与系统管理员联系以获取使用服务器的权限。
如果将 Exchange Server 名称指定为 SMTPServer,则也会发生此错误。若要使用 Exchange 服务器传递电子邮件,必须指定为 Exchange 服务器配置的 SMTP 网关的名称。请与 Exchange 管理员联系获取此信息。
打开 Reporting Services Configuration Management:
Change the Reporting Services Windows account to be a account(e.g. Domain Account), which has permissions to send mails via the SMTP server.
Open rsreportserver.config with TextEditor(e.g. notepad), change the SMTPAuthenticate to
<SMTPAuthenticate>2</SMTPAuthenticate>Save the file, and then restart the Reporting Services.
Now, we should be able to send mails.
https://technet.microsoft.com/zh-cn/library/ms159171(v=sql.105).aspx
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ab8ab29e-640b-4114-bde3-9a532c53700b/unable-to-send-email-through-ssrs?forum=sqlreportingservices
4. 我想把一个查询结果用SQL发出邮件这个过程怎么做
--1.启用DatabaseMail扩展存储过程
sp_configure'showadvancedoptions',1
GO
RECONFIGURE
GO
sp_configure'DatabaseMailXPs',1
GO
RECONFIGURE
GO
sp_configure'showadvancedoptions',0
GO
RECONFIGURE
GO
--2.添加account
execmsdb..sysmail_add_account_sp
@account_name='zhanghao'--邮件帐户名称SQLServer使用
,@email_address='[email protected]'--发件人邮件地址
,@mailserver_name='smtp.126.com'--邮件服务器地址
,@mailserver_type='SMTP'--邮件协议SQL2005只支持SMTP
,@port=25--邮件服务器端口
,@username='zhanghao'--用户名
,@password='mima'--密码
--3.添加profile
execmsdb..sysmail_add_profile_sp
@profile_name='dba_profile'--profile名称
,@description='dbamailprofile'--profile描述
,@profile_id=null
--4.映射account和profile
execmsdb..sysmail_add_profileaccount_sp
@profile_name='dba_profile'--profile名称
,@account_name='zhanghao'--account名称
,@sequence_number=1--account在profile中顺序
--5.1发送文本邮件
execmsdb..sp_send_dbmail
@profile_name='dba_profile'
,@recipients='[email protected]'
,@subject='SQLServer邮件测试'
,@body='内容啊'
,@body_format='TEXT'
--5.2发送附件
EXECsp_send_dbmail
@profile_name='dba_profile',
@recipients='[email protected]',
@subject='这是附件',
@file_attachments='G:乱七八糟sql.txt'
--5.3发送查询结果
EXECsp_send_dbmail
@profile_name='dba_profile',
@recipients='[email protected]',
@subject='这是查询',
@query='select*fromtest.dbo.apo_city'
--6.查看邮件发送情况
select*fromsysmail_allitems
select*fromsysmail_mailitems
select*fromsysmail_event_log
--7.删除邮件配置
Execmsdb..sysmail_delete_profileaccount_sp
@profile_name='dba_profile',
@account_name='zhanghao'
Execmsdb..sysmail_delete_profile_sp
@profile_name='dba_profile'
Execmsdb..sysmail_delete_account_sp
@account_name='zhanghao'
5. 你好,我想问您一个问题,我在使用SQL Server 2008 R2运行存储过程发送邮件的时候遇到了下面的错误。
这个是服务器配置的问题:
你自己网络搜下: SQL Server 阻止了对组件 'Database Mail XPs' 的 过程 'dbo.sp_send_dbmail' 的访问
这里不方便发URL。按教程进行配置