当前位置: 首页 > news >正文

『EasyNotice』.NET开源消息通知组件——快速实现邮件/钉钉告警通知

请添加图片描述
📣读完这篇文章里你能收获到

  • 傻瓜式扩展方法直接使用
  • 如何通过EasyNotice快速实现钉钉/邮件的通知发送
  • 感谢点赞+收藏,避免下次找不到~

请添加图片描述

文章目录

  • 一、EasyNotice
    • 1. 功能介绍
    • 2. 源码地址
  • 二、项目接入
    • 1. 发送邮件通知
      • Step 1 : 安装包,通过Nuget安装包
      • Step 2 : 配置 Startup 启动类
      • Step 3 : IEmailProvider服务接口使用
    • 2. 发钉钉通知
      • Step 1 : 安装包,通过Nuget安装包
      • Step 2 : 配置 Startup 启动类
      • Step 3 : IDingtalkProvider服务接口使用
    • 3. 更多示例

请添加图片描述

一、EasyNotice

这是一个基于.NET开源的消息通知组件,它包含了邮件通知、钉钉通知,可以帮助我们更容易地发送程序异常通知!


1. 功能介绍

  • 支持邮件发送、钉钉发送
  • 支持自定义发送间隔,避免同样的异常频繁通知
  • 傻瓜式配置,开箱即用

2. 源码地址

  • https://github.com/Bryan-Cyf/EasyNotice

请添加图片描述

二、项目接入

1. 发送邮件通知

邮件通知支持同时发送给多个收件人

Step 1 : 安装包,通过Nuget安装包

Install-Package EasyNotice.Core
Install-Package EasyNotice.Email

Step 2 : 配置 Startup 启动类

public class Startup
{//...public void ConfigureServices(IServiceCollection services){//configurationservices.AddEsayNotice(config =>{config.IntervalSeconds = 10;//同一标题的消息,10秒内只能发一条,避免短时间内大量发送重复消息config.UseEmail(option =>{option.Host = "smtp.qq.com";//smtp域名option.Port = 465;//端口option.FromName = "System";//发送人名字(自定义)option.FromAddress = "12345@qq.com";//发送邮箱option.Password = "passaword";//秘钥option.ToAddress = new List<string>()//收件人集合{"12345@qq.com"};});});}    
}

Step 3 : IEmailProvider服务接口使用

[ApiController]
[Route("[controller]/[action]")]
public class NoticeController : ControllerBase
{private readonly IEmailProvider _mailProvider;public NoticeController(IEmailProvider provider){_mailProvider = provider;}[HttpGet]public async Task SendMail([FromQuery] string str){//发送邮件await _mailProvider.SendAsync(str, new Exception(str));}
}

2. 发钉钉通知

Step 1 : 安装包,通过Nuget安装包

Install-Package EasyNotice.Core
Install-Package EasyNotice.Dingtalk

Step 2 : 配置 Startup 启动类

public class Startup
{//...public void ConfigureServices(IServiceCollection services){//configurationservices.AddEsayNotice(config =>{config.IntervalSeconds = 10;//同一标题的消息,10秒内只能发一条,避免短时间内大量发送重复消息config.UseDingTalk(option =>{option.WebHook = "https://oapi.dingtalk.com/robot/send?access_token=xxx";option.Secret = "secret";});});}    
}

Step 3 : IDingtalkProvider服务接口使用

[ApiController]
[Route("[controller]/[action]")]
public class NoticeController : ControllerBase
{private readonly IDingtalkProvider _dingtalkProvider;public NoticeController(IDingtalkProvider dingtalkProvider){_dingtalkProvider = dingtalkProvider;}[HttpGet]public async Task SendDingTalk([FromQuery] string str){await _dingtalkProvider.SendAsync(str, new Exception(str));}
}

3. 更多示例

  1. 查看 更多使用例子
  2. 查看 更多测试用例
  3. 源码地址:https://github.com/Bryan-Cyf/EasyNotice
  • 对你有用的话,顺手点个小小的star

相关文章:

『EasyNotice』.NET开源消息通知组件——快速实现邮件/钉钉告警通知

&#x1f4e3;读完这篇文章里你能收获到 傻瓜式扩展方法直接使用如何通过EasyNotice快速实现钉钉/邮件的通知发送感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录一、EasyNotice1. 功能介绍2. 源码地址二、项目接入1. 发送邮件通知Step 1 : 安装包&#xff0c;通过Nuget安装…...

JVM垃圾回收算法

垃圾标记阶段 对象存活判断&#xff1a;在堆里存放着几乎所有的Java对象实例&#xff0c;在GC执行垃圾回收之前&#xff0c;首先需要区分出内存中哪些是存活对象&#xff0c;哪些是已经死亡的对象。只有被标记为己经死亡的对象&#xff0c;GC才会在执行垃圾回收时&#xff0c;…...

怎么看待ChatGPT封号这件事呢?

最近的ChatGPT大量封号&#xff0c;刷爆了全网&#xff0c;我的两个个人账号被封禁了&#xff0c;不知道大家最近有没有遇到相关的报错信息&#xff0c;要么就是检查你当前的浏览器配置&#xff0c;最后来一个access denied&#xff0c;要么直接就给你来一个当前的国家不支持。…...

八、交换技术原理

&#xff08;一&#xff09;交换机 1、交换机介绍 一种用于电&#xff08;光&#xff09;信号转发的网络设备&#xff0c;可以为接入交换机的任意两个网络节点提供独享的电信号通路。 工作于第二层的叫交换机&#xff0c;工作于第三层的叫第三层交换机&#xff0c;最常见的是…...

什么是DHCP?DHCP有什么用?(中科三方)

在IP网络中&#xff0c;每一个连接的设备都需要分配一个唯一的IP地址&#xff0c;才能实现和Internet上其他设备的互联。在一些终端规模较大的网络中&#xff0c;需要为每一个主机手工配置IP地址&#xff0c;以避免IP地址的重复&#xff0c;如果主机发生变更&#xff0c;还要去…...

算法设计-二分

一、有序和单调 ​ 二分本质上是一种更加智能的搜索状态空间的方式&#xff0c;他需要状态空间的状态呈现一种“有序的一维数组”的形式&#xff0c;然后再进行搜索。所以一开始的排序是无法避免的。 ​ 因为二分的写法问题&#xff0c;所以应当怎样排序也是有一定讲究的&…...

隧道技术基础

隧道技术基础基本概念端口转发应用层代理基本概念 攻击者通过边界主机进入内网&#xff0c;往往会利用它当跳板进行横向渗透&#xff0c;但现在的内部网络大多部署了很多安全设备&#xff0c;网络结构错综复杂&#xff0c;对于某些系统的访问会受到各种阻挠&#xff0c;这就需…...

卡尔曼滤波浅析

文章目录前言任务状态预测外部影响因素外部不确定性状态更新利用测量进一步修正状态合并两个高斯分布公式汇总图形化解释总结&#xff08;readme&#xff09;references前言 Kalman Filter算法&#xff0c;是一种递推预测滤波算法&#xff0c;算法中涉及到滤波&#xff0c;也涉…...

Eolink Apikit 创建/生成 API 文档

在 API 研发管理产品中&#xff0c;几乎所有的协作工作都是围绕着 API 文档进行的。 我们在接触了大量的客户后发现&#xff0c;采用 文档驱动 的协作模式会比先开发、后维护文档的方式更好&#xff0c;团队协作效率和产品质量都能得到提高。因此我们建议您尝试基于文档来进行工…...

2023年上半年系统分析师备考法则

截止3月30日&#xff0c;上海、北京等地都开始报名&#xff0c;部分省市已经截止报名&#xff0c;大家如果还没报名成功的赶紧报名&#xff0c;千万别错过了&#xff0c;另外就是别忘了缴费&#xff0c;缴费成功才是报名成功。 报名网址&#xff1a;https://bm.ruankao.org.cn…...

【人工智能】—约束传播、弧约束、问题结果与问题分解、局部搜索CSP

【人工智能】—约束传播、弧约束、问题结果与问题分解、局部搜索CSP约束传播弧约束弧相容算法AC-3问题结构化简约束图-树结构CSP问题的局部搜索CSP的迭代算法举例&#xff1a;4-Queens加速&#xff1a;模拟退火法加速&#xff1a;最小最大优化(约束加权法)小结约束传播 前向检…...

Java设计模式面试专题

1.请列举出在 JDK 中几个常用的设计模式&#xff1f; 单例模式&#xff08;Singleton pattern&#xff09;用于 Runtime&#xff0c;Calendar 和其他的一些类中。工厂模式&#xff08;Factory pattern&#xff09;被用于各种不可变的类如 Boolean&#xff0c;像 Boolean.value…...

文件(下)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是文件的知识点&#xff0c;下面&#xff0c;就让我们进入文件的世界吧 文件的顺序读写 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲区 在上篇博客中&#xff0c…...

bugku 渗透靶场3

前言 本题一共八个flag&#xff0c;主要是为了练习内网渗透的思路。 解题思路 首先给了一个站长之家-模拟蜘蛛爬取&#xff0c;这个以前见到过&#xff0c;存在sstf漏洞&#xff0c;直接读取文件。 file:///flag既然是要内网渗透&#xff0c;那肯定要看/etc/hosts。 file:…...

NER 任务以及联合提槽任务

KBERT 论文&#xff1a;《K-BERT: Enabling Language Representation with Knowledge Graph》 论文地址&#xff1a;https://arxiv.org/pdf/1909.07606v1 git地址&#xff1a;https://github.com/autoliuweijie/K-BERT SoftLexicon 出自ACL 2020的Simplify the Usage of Lexic…...

scala函数式编程

目录 不同范式对比&#xff1a; 1.面向对象编程 2.函数式编程 2.1函数基本语法 2.2函数和方法的区别 核心概念&#xff1a; 2.3函数定义 2.4函数参数 2.5 函数至简原则 2.6.高阶函数 三.偏函数 四.柯里化函数 五.递归函数 递归函数注意点&#xff1a; 六.控制抽象 1…...

网吧2023:热闹回来了,电竞战歌起

【潮汐商业评论/原创】 大年初四下午&#xff0c;人民公园附近尚未恢复往日热闹&#xff0c;上海网鱼电竞负责人崔潇瀚驱车前往位于人广世贸商场的网鱼电竞。 与广场上三两路人行色匆匆相比&#xff0c;门店显得忙碌异常&#xff0c;前台的服务叫单声响个不停&#xff0c;员工…...

代码随想录算法训练营第五十九天|503.下一个更大元素II、42. 接雨水

​ LeetCode 503 下一个更大元素II 题目链接&#xff1a;https://leetcode.cn/problems/next-greater-element-ii/ 思路&#xff1a; 方法一:两个for循环遍历单调栈 第一个for循环确定数组中的某个值在右边有最大的数&#xff0c;第二个for循环是为了可以使数组变成循环数…...

9、简单功能分析

文章目录1、静态资源访问1.1、静态资源目录1.2、如果静态资源与controller资源重名1.3、改变默认的静态资源路径1.4、修改静态资源访问前缀1.5、webjar2、欢迎页支持3、自定义 Favicon4、静态资源配置原理4.1、与Web开发有关的相关自动配置类4.2、WebMvcAutoConfiguration 注解…...

如何发送和接收参数?五种参数传递方法

通常情况下&#xff0c;我们可以使用GET或POST来发送请求和数据&#xff0c;但GET和POST两种方法所携带的数据都是比较简单的数据&#xff0c;接下来在我们这个基础上&#xff0c;列举5种比较负责的参数传递方法&#xff0c;并对这些参数如何发送&#xff0c;后台改如何接收做详…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...

Linux中INADDR_ANY详解

在Linux网络编程中&#xff0c;INADDR_ANY 是一个特殊的IPv4地址常量&#xff08;定义在 <netinet/in.h> 头文件中&#xff09;&#xff0c;用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法&#xff0c;允许套接字监听所有本地IP地址上的连接请求。 关…...

Vue 实例的数据对象详解

Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...