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;

  • 相关阅读:
    视图的INSERT、UPDATE、DELETE注意事项
    SQL SERVER 用户管理 TSQL 命令
    SQL SERVER 利用存储过程查看角色和用户信息
    犯错了~
    配置tomcat
    python中的类继承之super
    python中参数解析
    python的几个内联函数:lambda ,zip,filter, map, reduce
    第一次性能测试http_load
    不能在 DropDownList 中选择多个项
  • 原文地址:https://www.cnblogs.com/dunitian/p/6022826.html
Copyright © 2011-2022 走看看