(转)SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件

SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件

[作/译者]:鹏城万里    [日期]:2008-07-24    [来源]:本站原创    [查看]: 2031

【鹏城万里】 发表于 www.sqlstudy.com

SQL Server:在 SQL Server 2005 中配置数据库邮件。

对于真正的 DBA 来说,数据库邮件是必不可少的。 例如,数据库发生了警报(alert), DBA 希望得到邮件通知,以便即时排除故障。 或者是监控数据库作业(SQL Server Job)的运行状况,当检查到失败的作业时, 就发送数据库邮件报告给 DBA。

在 SQL Server 2000 中 配置 “SQL Mail”,需要安装 Outlook,配置过程比较麻烦。 在 SQL Server 2005 中配置 “Database Mail” 就相对容易多了。 主要是理清思路。

SQL Server 并没有内置邮件服务器(Mail Server), 它跟我们发送邮件一样,需要用户名和密码通过 SMTP(Simple Message Transfer Protocol) 去连接邮件服务器。我们想让 SQL Server 来发送邮件,首先要告诉它用户名称,密码, 服务器地址,网络传送协议,邮件服务器的端口。。。等信息。这是通过 SQL Server 系统 存储过程 sysmail_add_account_sp 来实现的。

exec sysmail_add_account_sp

这样,在 SQL Server 2005 中就添加了一个发送邮件的帐户。 道理上讲,有了这个邮件帐户,SQL Server 就可以发送邮件了。 如:

sp_send_dbmail @account_name = 'mail_account'

但是,SQL Server 考虑的更周全。试想:如果这个邮件帐户发生故障 (比如:用户密码过期,或者邮件服务器宕机)那岂不是发送不了邮件了? 为了应对这种情况,SQL Server 2005 引入了 mail profile 这个东东。 一个 profile 中可以包含多个 account (邮件帐户),这样,SQL Server 发邮件的时候会依次尝试 profile 中的多个邮件帐户,如果发送成功,则退出, 否则,利用下一个邮件帐户发送邮件。其中,添加 profile 和 在 account 和 profile 建立映射是通过下面两个系统存储过程实现的:

sysmail_add_profile_sp
sysmail_add_profileaccount_sp

这时候,SQL Server 发送邮件,就采用下面的方法了:

sp_send_dbmail @profile_name = 'profile_name'

下面是具体的配置邮件步骤

在 sa 系统帐户下运行。

1. 启用 SQL Server 2005 邮件功能。

use master
go

exec sp_configure 'show advanced options',1
go

reconfigure
go

exec sp_configure 'Database mail XPs',1
go

reconfigure
go

2. 在 SQL Server 2005 中添加邮件帐户(account)

exec msdb..sysmail_add_account_sp
@account_name = 'p.c.w.l' -- 邮件帐户名称(SQL Server 使用)
,@email_address = 'webmaster@sqlstudy.com' -- 发件人邮件地址
,@display_name = null -- 发件人姓名
,@replyto_address = null
,@description = null
,@mailserver_name = '58.215.64.159' -- 邮件服务器地址
,@mailserver_type = 'SMTP' -- 邮件协议(SQL 2005 只支持 SMTP)
,@port = 25 -- 邮件服务器端口
,@username = 'webmaster@sqlstudy.com' -- 用户名
,@password = 'xxxxxxxxx' -- 密码
,@use_default_credentials = 0
,@enable_ssl = 0
,@account_id = null

3. 在 SQL Server 2005 中添加 profile

exec msdb..sysmail_add_profile_sp @profile_name = 'dba_profile'      -- profile 名称 
,@description = 'dba mail profile' -- profile 描述
,@profile_id = null

4. 在 SQL Server 2005 中映射 account 和 profile

exec msdb..sysmail_add_profileaccount_sp  @profile_name    = 'dba_profile' -- profile 名称 
,@account_name = 'p.c.w.l' -- account 名称
,@sequence_number = 1 -- account 在 profile 中顺序

5. 利用 SQL Server 2005 Database Mail 功能发送邮件。

exec msdb..sp_send_dbmail @profile_name =  'dba_profile'               -- profile 名称 
,@recipients = 'sqlstudy@163.com' -- 收件人邮箱
,@subject = 'SQL Server 2005 Mail Test' -- 邮件标题
,@body = 'Hello Mail!' -- 邮件内容
,@body_format = 'TEXT' -- 邮件格式

6. 查看邮件发送情况:

use msdb
go

select * from sysmail_allitems
select * from sysmail_mailitems
select * from sysmail_event_log

如果不是以 sa 帐户发送邮件,则可能会出现错误:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
EXECUTE permission denied on object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

这是因为,当前 SQL Server 登陆帐户(login),在 msdb 数据库中没有发送数据库邮件的权限, 需要加入 msdb 数据库用户,并通过加入 sp_addrolemember 角色赋予权限。假设该SQL Server 登陆帐户 名字为 “dba”

use msdb
go

create user dba for login dba
go

exec dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole',
@membername = 'dba'
go

此时,再次发送数据库邮件,仍可能有错误:

Msg 14607, Level 16, State 1, Procedure sp_send_dbmail, Line 119
profile name is not valid

虽然,数据库用户 “dba” 已经在 msdb 中拥有发送邮件的权限了, 但这还不够,他还需要有使用 profile:“dba_profile” 的权限。

use msdb
go

exec sysmail_add_principalprofile_sp @principal_name = 'dba'
,@profile_name = 'dba_profile'
,@is_default = 1

从上面的参数 @is_default=1 可以看出,一个数据库用户可以在多个 mail profile 拥有发送权限。

现在,可以利用 SQL Server 2005 发送数据库邮件了吧。如仍有问题,请留言。

 

本文由 www.sqlstudy.com 原创,版权所有,转载请注明作者和出处!

本文链接:http://www.sqlstudy.com/sql_article.php?id=2008072403

转载于:https://www.cnblogs.com/s021368/articles/1683573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于2017届学长制作分享软件share(失物招领)的使用体验和需改进的内容

使用体验 1.注册界面 注册界面提示明显,提示用户输入什么类型的密码,而且输入什么样的用户名不限,注册界面色调比较单一,注册内容比较少,而且比较简单,体验感比较好,但注册界面色调和设计全无&a…

编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4

⚠️今天继续我们来探讨背包问题中的完全背包问题。完全背包:N个物品,容量为V,每个物品可以无限次使用,求达到V的最值。???今日练习(一)零钱兑换(LeetCode-322)。给定一批硬币coins数组,每个硬币可以不限次数使用&a…

算法与数据结构 (三) 二叉树的简单应用 二叉查找树,二叉堆排序

一 二叉查找树 二叉查找树又叫二叉排序树,是为了解决查找的效率问题。正常情况下查找一个元素,需要O(n)的代价,但是如果查找元素有顺序,有序数组:可以用二分查找降低到 lgn 代价,但…

数据库中索引原理

实际上,您可以把索引理解为一种特殊的目录。微软的SQLSERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引&a…

c++ enum 给定类型_C++11作用域内枚举enum

在C11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的。如果还不知道C中枚举(enum)是什么,可以看这篇:枚举enum如:苹果和桔子都有大,中,小。写个代码来说明下:两枚举类型中相同枚举…

httpRuntime 问题

httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。 executionTimeout:表示允许执行请求的最大时间限制,单位为秒 maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将…

linux文件软链接与硬链接

1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间。 2.命令功能: Linux文件系统中,有所谓的链接(link),我们可以将其视为…

java操作Excel的poi 遍历一个工作簿

遍历一个工作簿 package com.java.poi;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.…

PHP 一个比较完善的文件上传(转).

转点别人的代码&#xff0c;留着自己用&#xff01;<HTML> <HEAD> <TITLE>文件上传</TITLE> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"></HEAD> <BODY> <?$UploadedFile$_FILES[U…

mysql 删除记录代码_mysql 删除记录时报错

在sql命令行,删除一条记录时,发现一个很奇怪的错误下面的语句是可以正常执行的:delete from t_mid_test_convention where convention_id33;但是下面的报语法错:delete from t_mid_test_convention as mt2 where mt2.convention_id33;mysql>mysql> delete from t_mid_tes…

git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!

点击蓝色小字关注!关注一下你就不会有bug&#xff01;合并操作相对于常规的 commit&#xff0c;当使用 git merge 合并两个分支的时候&#xff0c;你会得到一个新的 merge commit。当我们 git show 的时候会出现类似信息&#xff1a;1commit 6dd0e2b9398ca8cd12bfd1faa1531d86d…

最长非单调增序列(最长非单调增序列,,要用N*LOG N(非常值得琢磨的算法。)...

http://acm.pku.edu.cn/JudgeOnline/problem?id1887 &#xff08;最长非单调增序列&#xff0c;&#xff0c;要用N*LOG N&#xff08;不然会超时。&#xff09;&#xff09; 二分模板&#xff1a; int Find(int a,int end) { if(a>ans[1])return 1; for(int beg1;beg!end-1…

Spring中抛出异常时,既要要返回错误信息,还要做事务回滚

情况一&#xff1a;如果没有在程序中手动捕获异常&#xff0c;如下代码事务会回滚 Transactional(rollbackFor { Exception.class }) public void test() throws Exception { doDbStuff1(); doDbStuff2();//假如这个操作数据库的方法会抛出异常&#xff0c;方法doDb…

PS教程第十八课:放大缩小

导航器进行放大缩小操作

java mysql show status_Java 能不能执行mysql 中的show master status 命令

展开全部详细参32313133353236313431303231363533e4b893e5b19e31333337376263考文章&#xff1a;http://www.yuanxingyuan.com/?id18可以的&#xff0c;使用Statement 的 executeQuery&#xff0c;示例代码&#xff1a;public static List getDBMasterStatus() {List status…

git bash卡顿解决

清理windows临时目录可以解决&#xff0c;参见 http://blog.itpub.net/267265/viewspace-2287069/转载于:https://www.cnblogs.com/ShiningWay/p/11042645.html