利用SQLServer数据库发送邮件
这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候。等等,,,
先回顾一下以前用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,会用即可)
脚本:
123456789101112131415161718192021222324252627282930--开启发邮件功能
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
发送邮件脚本:
123456exec
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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124exec 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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2015-11-02 08.移动先行之谁主沉浮----控件之轮流轰炸——常用控件
2015-11-02 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件