利用SQLServer数据库发送邮件

Posted 码道安邦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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\'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;

以上是关于利用SQLServer数据库发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何使用 Outlook 发送代码片段?

JavaMail:利用JavaMail发送复杂邮件

SQL Server 2008R2 不发送数据库邮件

利用Python+163邮箱授权码发送邮件

Javascript - 使用 HTML 片段通过电子邮件发送 JSON 输出

如何用sqlserver自动给用户发邮件 0