SQL2005发邮件的配置

SQL Server 并没有内置邮件服务器(Mail Server),它跟我们发送邮件一样,需要用户名和密码通过 SMTP(Simple Message Transfer Protocol)去连接邮件服务器。我们想让 SQL Server 来发送邮件,首先要告诉它用户名称,密码,服务器地址,网络传送协议,邮件服务器的端口。。。等信息。
  以下脚本实现了数据库邮件的配置:
--下面是具体的配置邮件步骤
--
在 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            = 'jgj'      -- 邮件帐户名称(SQL Server 使用)
       ,@email_address           = [email='[email protected]']'[email protected]'[/email] -- 发件人邮件地址
       ,@display_name            = null                      -- 发件人姓名
       ,@replyto_address         = null
       ,
@description             = null
       ,
@mailserver_name         = '203.86.70.229'           -- 邮件服务器地址
       ,@mailserver_type         = 'SMTP'                    -- 邮件协议(SQL 2005 只支持 SMTP)
       ,@port                    = 25                        -- 邮件服务器端口
       ,@username                = [email='[email protected]']'[email protected]'[/email] -- 用户名
       ,@password                = 'xxxxxx'      -- 密码
       ,@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
-- 在 SQL Server 2005 中映射 account 和 profile
exec msdb..sysmail_add_profileaccount_sp  @profile_name    = 'dba_profile' -- profile 名称
                                         ,@account_name    = 'jgj'     -- account 名称
                                         ,@sequence_number = 1             -- account 在 profile 中顺序
--
5. 利用 SQL Server 2005 Database Mail 功能发送邮件。
exec msdb..sp_send_dbmail @profile_name =  'dba_profile'     -- profile 名称
                         ,@recipients   =  [email='[email protected]']'[email protected]'[/email]  -- 收件人邮箱
                         ,@subject      =  'SQL Server 2005 Mail 测试' -- 邮件标题
                         ,@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 拥有发送权限。

查看配置情况:

   SELECT *   FROM sys.credentials
   SELECT * FROM msdb.dbo.sysmail_profileaccount
   SELECT * FROM msdb.dbo.sysmail_account

 

手工删除配置:

EXEC dbo.sysmail_delete_profileaccount_sp @profile_id = 1, -- int,根据需要更改,以下相同
    @profile_name = NULL, -- sysname
    @account_id = 1, -- int
    @account_name = NULL -- sysname

EXEC dbo.sysmail_delete_profile_sp @profile_id = 1, -- int
    @profile_name = 'dba_profile', -- sysname
    @force_delete = NULL -- bit

EXEC dbo.sysmail_delete_account_sp @account_id = 1, -- int
    @account_name = 'jgj' -- sysname

 

也可以通过企业管理器里面的"管理"---"数据库邮件"来进行图形化配置


发邮件的几种语句:

use mdsb

--基本的发送语句
EXEC sp_send_dbmail @profile_name = 'xx_adam',
@recipients = '[email protected]',
@subject = '我数据库邮件测试成功了!',
@body = 'hello,world!'

--包含查询的
EXEC sp_send_dbmail @profile_name = 'xx_adam',
@recipients = '[email protected]',
@subject = '查询结果',
@query = 'select * from demo.dbo.orders',


--包含附件
EXEC sp_send_dbmail @profile_name = 'xx_adam',
@recipients = '[email protected]',
@subject = '包含附件',
@body = '有附件,请查收',
@file_attachments = 'c:a.txt'

--将查询作为附件
EXEC sp_send_dbmail @profile_name = 'xx_adam',
@recipients = '[email protected]',
@subject = '查询结果',
@body = '查询结果在附件中',
@query = 'select * from demo.dbo.orders',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'a.txt'


你可能感兴趣的:(sql,sql,数据库,server,delete,邮件服务器,credentials)