利用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 --记录日记

 

 

参考文章:

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'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent',
  N'DatabaseMailProfile' ---邮件系统【选择数据库邮件】

EXEC master.dbo.Xp_instance_regwrite
  N'HKEY_LOCAL_MACHINE',
  N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent',
  N'UseDatabaseMail',
  N'REG_DWORD',

EXEC master.dbo.Xp_instance_regwrite
  N'HKEY_LOCAL_MACHINE',--启用警报系统 【启用邮件配置文件】
  N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent',
  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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.使用 MSSQLServer 服务会用到的用户帐户登录到 Microsoft Windows NT? 4.0 或 Windows? 2000 上。该用户帐户必须是本地计算机的管理员和域帐户。 2.确认 Exchange Server 客户端 (Exchnge32.exe) 或 Microsoft Outlook? 客户端 (Outlook.exe) 能够连接到 Exchange Server 而且能够发送电子邮件。如果使用 Outlook,确保 Outlook 安装时选择了 "用于企业或工作组 "选项。 3.确认所用的 Exchange Server 配置文件中没有个人消息存储 (.pst)。Exchange Server 配置文件的名字不应超过 32 个字符。 4.在 "服务 "选项卡上,确认 Microsoft Exchange Server 和个人通讯簿是唯一可用的服务,然后单击 "发送 "选项卡。确认 "发送到 "框中选定的内容是 Exchange Server 中的邮箱,它应该有一个类似于 "邮箱 - <友好的用户名 > "的名字(其中 <友好的用户名 >是在第一步中登录到 Windows NT 4.0 或 Windows 2000 的用户名)。 5.要运行带有 Exchange Server 的 "SQL 邮件 ",MSSQLServer 服务必须在第一步中登录的同一个用户帐户下运行。在 "控制面板 "中,双击 "服务 ",选择 MSSQLServer 服务,然后单击 "启动 "。 6.确认 "SQL 邮件 "的配置文件是否正确。在 SQL Server 企业管理器中,展开服务器,展开 "支持服务 "文件夹,选择 "SQL 邮件 ",然后用右键单击。单击 "属性 ",然后在 "常规 "选项卡上,确保 "配置文件名 "框中指定的配置文件名正确。(事件探查器名必须与第三步中用到的配置文件名匹配。)单击 "测试 ",验证配置文件设置正确。 7.如果 "SQL 邮件 "无法启动(例如,显示错误信息指出配置文件不正确),请检查设置确保未将 Outlook Express 设置为默认的电子邮件客户程序。在 "控制面板 "中双击 "Internet "选项。在 "程序 "选项卡中,验证 Outlook Express 不在电子邮件组合框中。如果不得不将默认的电子邮件客户程序更改为 Outlook Express 以外的客户程序,那么,可能需要先验证 "SQL 邮件 "能够用邮件配置文件启动,然后再停止并重新启动 MSSQLServer 服务。 在有些情况下,邮件的配置文件可能会损坏而且 "SQL 邮件 "将无法使用它。要更正这个问题,需要把配置文件复制到另一个文件名下,或重新创建配置文件。 8.如果用来启动 Microsoft SQL Server? 的帐户没有权限访问 Exchange 服务器,那么就无法使用 "SQL 邮件 "。执行 xp_cmdshell 来测试 SQL Server 对 Exchange Server 的访问权限,它执行与 "SQL 邮件 "相同的权限。使用下面的命令测试对服务器的连接,假定 Exchange Server 位于名为 "MyServer "的计算机上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值