zoukankan      html  css  js  c++  java
  • 利用SQLServer数据库发送邮件

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql

    这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候。等等,,,

    先回顾一下以前用C#发邮件的内容:http://www.cnblogs.com/dunitian/p/5682930.html

    可能有些人看不太懂,这个是简单演示:https://github.com/dunitian/LoTCodeBase/blob/master/NetCode/0.知识拓展/01.网络编程/3.System.Net.Mail/3.3.SmtpClient/EmailHelper.cs

    步入正轨:

    在配置之前请先把邮件的POP3之类的设置一下:

    简图:

    其他邮箱都是类似的,可以参考这个:http://www.cnblogs.com/dunitian/p/5682930.html#god

    图形化演示:

     

    配置名字随意取,可以用项目名。显示名称建议用版本号+服务器ip,这样出问题可以定位跟踪

     

    微软图形化的东西一般有个特点,一路下一步基本上能解决所有基础问题

    勾选一下(貌似不勾选也没事)

    测试一下:

    发一封邮件到“我为NET狂”的官方邮件去

    去看看:

    命令演示:(不需要记,你又不是DBA,会用即可)

    脚本: 

    --开启发邮件功能
    exec sp_configure 'show advanced options',1
    reconfigure with override  
    go
    exec sp_configure 'database mail xps',1 
    reconfigure with override  
    go
    
    --创建邮件帐户信息 
    exec msdb.dbo.sysmail_add_account_sp
      @account_name ='dunitian1',					-- 邮件帐户名称    
      @email_address ='xxxx@yeah.net',				-- 发件人邮件地址     
      @display_name ='SQLServer2014_192.168.1.20',	-- 发件人姓名  
      @MAILSERVER_NAME = 'smtp.yeah.net',			-- 邮件服务器地址 
      @PORT =25,									-- 邮件服务器端口  
      @USERNAME = 'xxxx@yeah.net',					-- 用户名  
      @PASSWORD = '邮件密码'							-- 密码   
    GO
    --数据库配置文件
    exec msdb.dbo.sysmail_add_profile_sp
      @profile_name = 'SQLServer_DotNetCrazy1',		-- 配置名称  
      @description = '数据库邮件配置文件'			-- 配置描述
    go
    
    --用户和邮件配置文件相关联
    exec msdb.dbo.sysmail_add_profileaccount_sp
      @profile_name = 'SQLServer_DotNetCrazy1',		-- 配置名称
      @account_name = 'dunitian1',					-- 邮件帐户名称     
      @sequence_number = 1							-- account 在 profile 中顺序(默认是1)
    go

     

    发送邮件脚本:

    exec msdb.dbo.sp_send_dbmail
    @profile_name = 'SQLServer_DotNetCrazy1',	--配置名称
    @recipients = 'dotnetcrazy@foxmail.com',	--收件名称
    @body_format = 'HTML',						--内容格式
    @subject = '文章标题',
    @body = '邮件内容'

    结果:20的ip也发过来了

    --相关查询
    -- select * from msdb.dbo.sysmail_allitems
    -- select * from msdb.dbo.sysmail_faileditems --失败状态的消息
    -- select * from msdb.dbo.sysmail_unsentitems --看未发送的消息
    -- select * from msdb.dbo.sysmail_sentitems --查看已发送的消息

    -- select * from msdb.dbo.sysmail_event_log --记录日记

    -- select * from sysmail_mailitems

    参考文章:

    http://www.cnblogs.com/junqingday/p/4187161.html

    exec sp_configure 'show advanced options',1
    RECONFIGURE WITH OVERRIDE  
    go
    exec sp_configure 'database mail xps',1 
    RECONFIGURE WITH OVERRIDE  
    go
    
    --2.创建邮件帐户信息 
    EXEC msdb..Sysmail_add_account_sp
      @ACCOUNT_NAME ='OCTMamiETL',-- 邮件帐户名称    
      @EMAIL_ADDRESS ='OCTMamiETL@163.com',-- 发件人邮件地址     
      @DISPLAY_NAME ='系统管理员',-- 发件人姓名  
      @REPLYTO_ADDRESS =NULL,
      @DESCRIPTION = NULL,
      @MAILSERVER_NAME = 'SMTP.163.COM',-- 邮件服务器地址    
      @MAILSERVER_TYPE = 'SMTP',-- 邮件协议      
      @PORT =25,-- 邮件服务器端口  
      @USERNAME = 'OCTMamiETL@163.com',-- 用户名  
      @PASSWORD = 'ABC123',-- 密码   
      @USE_DEFAULT_CREDENTIALS =0,
      @ENABLE_SSL =0,
      @ACCOUNT_ID = NULL
    
    GO
    
    --3.数据库配置文件
    IF EXISTS(SELECT name
              FROM   msdb..sysmail_profile
              WHERE  name = N'ETLErrorProfileLog')
      BEGIN
          EXEC msdb..Sysmail_delete_profile_sp @profile_name='ETLErrorProfileLog'
      END
    
    EXEC msdb..Sysmail_add_profile_sp
      @profile_name = 'ETLErrorProfileLog',-- profile 名称  
      @description = '数据库邮件配置文件',-- profile 描述    
      @profile_id = NULL
    
    go
    
    --4.用户和邮件配置文件相关联
    EXEC msdb..Sysmail_add_profileaccount_sp
      @profile_name = 'ETLErrorProfileLog',-- profile 名称   
      @account_name = 'OCTMamiETL',-- account 名称     
      @sequence_number = 1 -- account 在 profile 中顺序
    --5.发送文本测试邮件
    EXEC msdb..Sp_send_dbmail
      @profile_name='ETLErrorProfileLog',
      @recipients='OCTMamiETL@163.com',--收件人
      @subject='Test title this is test ',
      @body=N'z中文邮件内容  中文邮件内容'
    
    go
    
    -----------------------------------------------------------------------------------
    /*
        功能说明:启用警报系统里面的邮件配置
        参数说明: xp_instance_regwrite 修改注册表
    */
    EXEC msdb.dbo.Sp_set_sqlagent_properties @email_save_in_sent_folder=1
    
    EXEC master.dbo.Sp_mssetalertinfo @pagersendsubjectonly = 0 --启用警报系统 【在通知消息中包含电子邮件的正文】
    
    EXEC master.dbo.Xp_instance_regread
      N'HKEY_LOCAL_MACHINE',--启用警报系统 【启用邮件配置文件】
      N'SOFTWAREMicrosoftMSSQLServerSQLServerAgent',
      N'DatabaseMailProfile' ---邮件系统【选择数据库邮件】
    
    EXEC master.dbo.Xp_instance_regwrite
      N'HKEY_LOCAL_MACHINE',
      N'SOFTWAREMicrosoftMSSQLServerSQLServerAgent',
      N'UseDatabaseMail',
      N'REG_DWORD',
    
    EXEC master.dbo.Xp_instance_regwrite
      N'HKEY_LOCAL_MACHINE',--启用警报系统 【启用邮件配置文件】
      N'SOFTWAREMicrosoftMSSQLServerSQLServerAgent',
      N'DatabaseMailProfile',---邮件系统【选择数据库邮件】
      N'REG_SZ',
      'ETLErrorProfileLog' ---邮件配置文件【邮件配置里面的SQLMailProfile】   
    
    -----------------------------------------------------------------------------------
    DECLARE @Sys_OperatorsName VARCHAR(100)
    
    SET @Sys_OperatorsName='BSMicheal'
    
    IF EXISTS (SELECT name
               FROM   msdb.dbo.sysoperators
               WHERE  name = @Sys_OperatorsName)
      BEGIN
          EXEC msdb..Sp_delete_operator @name = @Sys_OperatorsName -- 操作员
      END
    
    EXEC msdb.dbo.Sp_add_operator
      @name = @Sys_OperatorsName,
      @enabled = 1,
      @weekday_pager_start_time = 90000,
      @weekday_pager_end_time = 180000,
      @saturday_pager_start_time = 90000,
      @saturday_pager_end_time = 180000,
      @sunday_pager_start_time = 90000,
      @sunday_pager_end_time = 180000,
      @pager_days = 127,
      @email_address = 'OCTMamiETL@163.com',-----仅可以对 SQL Mail 使用电子邮件别名。必须对数据库邮件使用电子邮件地址。
      @pager_address = N'',
      @netsend_address = N''
    
    /*
        功能说明: 在Job中添加操作员的操作
        参数说明:  @notify_level_email指定何时将该作业的项放入 Microsoft Windows 应用程序日志。
                   eventlog_level 的数据类型为 int 【0 从不 1 成功时 2 失败时 3 始终】         
        修改说明:Create by LY on 2011-010-10
    */
    IF EXISTS (SELECT 1
               FROM   msdb.dbo.sysjobs
               WHERE  name = 'dad')
      BEGIN
          EXEC msdb.dbo.Sp_update_job
            @job_name = 'dad',---对应的作业名称
            @notify_level_email = 2,
            @notify_level_netsend = 2,
            @notify_level_page = 2,
            @notify_email_operator_name = 'BSMicheal' ---对应的操作员
      END;

  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/dunitian/p/6022826.html
Copyright © 2011-2022 走看看