zoukankan      html  css  js  c++  java
  • MSSQL发送邮件

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

    以下脚本实现了数据库邮件的配置:

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

    在 sa 系统帐户下运行。 

     

    -- 打开邮件设置
    use master
    go
    exec sp_configure 'show advanced options',1 --以下示例显示如何设置并列出所有的配置选项。先将 show advanced option 设置为 1,便可显示高级配置选项。更改该选项后,不带参数执行 sp_configure 将会显示全部配置选项。
    go
    reconfigure
    go
    exec sp_configure 'Database mail XPs',1
    go
    reconfigure
    go

    -- 添加邮件账户
    exec msdb..sysmail_add_account_sp --创建一个新的数据库邮件帐户,用于保存有关 SMTP 帐户的信息
    @account_name='yyy' --邮件账户名称(SQL Server 使用)
    ,@email_address='yyy753@qq.com' --发件人邮件地址
    ,@display_name=null --发件人姓名
    ,@replyto_address=null --回复该帐户的邮件时使用的地址
    ,@description=null --对帐户的说明
    ,@mailserver_name='smtp.qq.com' --邮件服务器地址
    ,@mailserver_type='SMTP' --邮件协议
    ,@port=25 --邮件服务器端口
    ,@username='yyy@qq.com' --用户名
    ,@password='123456' --密码
    ,@use_default_credentials=0 --指定是否使用 SQL Server 数据库引擎的凭据将邮件发送到 SMTP 服务器
    ,@enable_ssl=0 --指定数据库邮件是否使用安全套接字层对通信进行加密
    ,@account_id=null --返回新帐户的帐户 ID

    -- 添加profile
    exec msdb..sysmail_add_profile_sp --创建新的数据库邮件配置文件。
    @profile_name='dba_profile' --新配置文件的名称
    ,@description='dba mail profile' --新配置文件的说明
    ,@profile_id=null --返回新配置文件的 ID

    -- 映射account和profile
    exec msdb..sysmail_add_profileaccount_sp --在数据库邮件配置文件中添加一个数据库邮件帐户
    @profile_name='dba_profile' --要在其中添加帐户的配置文件的名称
    ,@account_name='yyy' --要在配置文件中添加的帐户的名称
    ,@sequence_number=1 --配置文件中的帐户的序列号

    -- 利用Database Mail功能发送邮件
    exec msdb..sp_send_dbmail --向指定收件人发送电子邮件
    @profile_name='dba_profile' --发送邮件的配置文件的名称
    ,@recipients='yangyunyu123@foxmail.com' --收件人
    ,@subject='SQL Server E-Mail Test!' --邮件标题
    ,@body='Hello!yyy!' --邮件内容
    ,@body_format='TEXT' --邮件格式

    -- 查看发邮件结果
    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 拥有发送权限。







    /******************************************************
    PS:这篇文章如何?喜欢就在右下角点一下推荐吧,反正点一下又不会怀孕……
    ******************************************************/
  • 相关阅读:
    数据库基础之锁(2. 幻读理解)
    数据库基础之锁(3. 避免幻读对事务并发性的影响)
    数据库基础之锁(4. 多版本并发控制MVCC原理详解)
    同步、异步与阻塞非阻塞
    C++基础之Lambda表达式
    C++基础之static的二三事
    个人总结 —— 事事满怀热情
    第三次结对作业:需求建模练习
    第二次结对作业
    第一次结对作业
  • 原文地址:https://www.cnblogs.com/yangyy753/p/2272391.html
Copyright © 2011-2022 走看看