在做Winform项目的时候,一直有一个梦想,就是希望把所有的组件模块组合即可组装成一个完整的项目系统(或者至少可以大部分完成)。在之前介绍的《Winform开发框架之通用附件管理模块》里面介绍了我的Winform开发框架的版图,里面包含了我对Winform模块化的一系列规划的组件,组件尽可能是适用于大多数的业务环境组合,以达到最大程度的重用和高效开发。

Winform开发框架是我集多年开发经验以及积累而成,很多细节之处润物细无声,但却是精粹心得所至,很多地方都希望是精益求精,力求把框架中的模块当成一把把神兵利器,用到的时候,马上就可以派生用场解决问题,这样可以避免给客户开发业务的时候,延误战机,或者因为事无巨细,都要从头来过,效率大打折扣,而且时间和金钱的大投入也未见得取得好的效果。

上两篇介绍了WInform框架中的通用定时服务管理模块,《Winform开发框架之通用定时服务管理》、《Winform开发框架之通用定时服务管理2---如何开发定时服务应用》,主要介绍主要在常规数据同步的时候,如何快速利用定时服务管理的通用模块,加上插件化的一些同步业务实现模块,实现强大、高效、松耦合的定时服务管理。本篇继续介绍Winform开发框架中的版图部分,通用短信邮件通知模块

开发这个模块的初衷是我在开发过的很多项目中,发现或多或少,都有短信通知、邮件通知、站内通知信息的需求,短信和邮件用的很多,也是大多数业务系统重复建设的模块之一,如单位办理业务要通知申请人,公司和客户沟通交流,公司内部员工沟通,这些可能是通过短信、邮件或者站内信息(或叫系统内部的通知信息)。如果这些模块能够快速搭建的话,对项目组来说,节省的时间,提高的是效率。对单位企业来说,这是高质量代码的保证,重复利用更可也减少重复的人力投资和成本支出。

1、模块设计

首先我们知道,短信、邮件、站内信息这几个业务的发送信息的时候,我们都希望记录相关的发送例子,其中短信实现发送的机制比较多,可能通过自己企业内部的短信MAS代理机来发送,也可能是通过购买的外部的WebService服务发送,因此通过插件模块的机制,实现短信发送逻辑的动态加载;邮件发送则利用.NET的邮件发送API,加上企业或者个人邮件发送参数即可实现,也是通过插件方式实现发送逻辑的动态加载;站内信息主要就是数据库记录,然后定时检测是否有记录即可,相对比较简单。

短信、邮件、站内信息的数据库设计,如下图所示,他们三者之间共用一个模板表,通过不同的TemplateType来识别不同的信息模板,这样信息模板表可以为短信、邮件、站内信息做更好的引用。

这里我们可以看到,我主要就是设计几个表来存储他们的发送记录,对于具体的短信发送,邮件发送,我们采用插件方式实现具体发送逻辑的封装,如下所示。

其中邮件发送接口和短信发送接口定义如下,方便实现基于插件方式的发送逻辑模块。

    public interface IMailSend{/// <summary>/// 发送外部邮件(自定义邮件配置,如个人邮件)/// </summary>/// <param name="mailInfo">发送邮件信息</param>/// <param name="settingInfo">SMTP协议设置信息</param>/// <returns></returns>
        CommonResult Send(MailInfo mailInfo, SmtpSettingInfo settingInfo);/// <summary>/// 发送外部邮件(系统配置,系统邮件)/// </summary>/// <param name="mailInfo">发送邮件信息</param>/// <returns></returns>
        CommonResult Send(MailInfo mailInfo);}public interface ISmsSend{/// <summary>/// 发送短信/// </summary>/// <param name="content">短信内容</param>/// <param name="mobiles">手机号码(多个号码用”,”分隔)</param>/// <param name="sendTime">预约发送时间</param>/// <returns></returns>CommonResult Send(string content, string mobiles, DateTime? sendTime);}

2、软件使用界面

1)短信界面功能

具体的模块界面如下,输入信息发送后成功的界面如下所示。

发送信息后,手机收到的结果如下所示。

短信还可以使用带有通讯录的发送界面,以及模板功能等方便性功能操作,如下所示。

通讯录可以通过调用窗体函数进行数据绑定,这样在调用的时候,只需要按照要求填写相应的数据就可以显示个人专属的通讯录了,方便勾选手机进行发送短信,操作绑定代码如下所示。

        private void btnSendWithList_Click(object sender, EventArgs e){FrmSendSMSWithList dlg = new FrmSendSMSWithList();Dictionary<string, List<ContactInfo>> dict = new Dictionary<string,List<ContactInfo>>();List<ContactInfo> list = new List<ContactInfo>();string category = "个人通讯录";list.Add(new ContactInfo(category, "001", "伍华聪", "18620292076", "wuhuacong@163.com"));list.Add(new ContactInfo(category, "002", "张三", "18620292077"));list.Add(new ContactInfo(category, "003", "李四", "18620292078"));dict.Add(category, list);dlg.BindTreeData(dict);dlg.ShowDialog();}

2)邮件发送界面

可以把邮件保存为模板,方便第二次引用,也可以从模板中选取已有的邮件内容进行发送,邮件模板界面如下所示。

邮件发送成功后,会在邮件发送历史中留下发送的内容记录,如下界面所示。

邮件发送成功的同时,我们可以看到腾讯的QQ邮件提示信息,如下所示。

进一步查看邮件的信息,可以看到邮件里面的内容如下所示,由于采用了RichEditControl控件编辑数据,因此嵌入到编辑器里面的图片(本地插入或者动态截图),都可以进行正常发送,利用这个特点,可以编辑图文并茂的邮件信息,而且RichEditControl控件支持直接从Word文档中直接加载等功能,该控件的使用,我会另外开一篇随笔进行介绍。

另外,和短信发送一样,也可以通过动态绑定用户的通讯录,然后发送的时候,选定即可,如下所示。

3)站内信息使用界面

站内信息,可以用于系统内部用户的信息交流,业务信息通知等用途,用户登录系统后,就可以看到系统内部用户发给自己的通知信息。

这个功能没有调用其他外部的插件模块进行处理,直接就是把数据存储到数据库,然后对方定时获取到通知后进行提示或者查看,界面如下所示。

3、通用短信邮件通知模块控件的调用

通用短信邮件通知模块已经对这几类业务进行较好的封装了,包括Winform界面部分的处理,也已经进行了较好的设计和封装,因此和我的权限管理模块、字典管理模块一样,非常方便使用的。

下面为了介绍具体三个模块的使用,我使用了一个测试界面作为演示,如下所示。

各个按钮的实现代码如下所示,从中我们可以看到具体的模块调用了。

        /// <summary>/// 短信发送模块调用/// </summary>private void btnSendSMS_Click(object sender, EventArgs e){FrmSendSMS dlg = new FrmSendSMS();dlg.ShowDialog();}/// <summary>/// 带通讯录的短信发送模块调用/// </summary>private void btnSendWithList_Click(object sender, EventArgs e){FrmSendSMSWithList dlg = new FrmSendSMSWithList();Dictionary<string, List<ContactInfo>> dict = new Dictionary<string,List<ContactInfo>>();List<ContactInfo> list = new List<ContactInfo>();string category = "个人通讯录";list.Add(new ContactInfo(category, "001", "伍华聪", "18620292076", "wuhuacong@163.com"));list.Add(new ContactInfo(category, "002", "张三", "18620292077"));list.Add(new ContactInfo(category, "003", "李四", "18620292078"));dict.Add(category, list);dlg.BindTreeData(dict);dlg.ShowDialog();}/// <summary>/// 短信发送历史/// </summary>private void btnSMSHistory_Click(object sender, EventArgs e){FrmSMSHistory dlg = new FrmSMSHistory();dlg.ShowDialog();}/// <summary>/// 邮件发送模块调用/// </summary>private void btnSendMail_Click(object sender, EventArgs e){FrmSendMail dlg = new FrmSendMail();dlg.Owner = this;//记录用来隐藏
            dlg.Show();}/// <summary>/// 带通讯录的邮件发送模块调用/// </summary>private void btnSendEmailWithList_Click(object sender, EventArgs e){FrmSendMailWithList dlg = new FrmSendMailWithList();Dictionary<string, List<ContactInfo>> dict = new Dictionary<string, List<ContactInfo>>();List<ContactInfo> list = new List<ContactInfo>();string category = "个人通讯录";list.Add(new ContactInfo(category, "001", "伍华聪", "18620292076", "wuhuacong@163.com"));list.Add(new ContactInfo(category, "002", "张三", "18620292077", "wuhuacong@hotmail.com"));list.Add(new ContactInfo(category, "003", "李四", "18620292078", "6966254@qq.com"));dict.Add(category, list);dlg.BindTreeData(dict);dlg.ShowDialog();}      /// <summary>/// 邮件发送历史/// </summary>private void btnMailHistory_Click(object sender, EventArgs e){FrmMailHistory dlg = new FrmMailHistory();dlg.ShowDialog();}/// <summary>/// 站内信息发送模块调用/// </summary>private void btnSendBroad_Click(object sender, EventArgs e){FrmSendBroad dlg = new FrmSendBroad();dlg.ShowDialog();}/// <summary>/// 站内信息发送历史/// </summary>private void btnBroadHistory_Click(object sender, EventArgs e){FrmBroadHistory dlg = new FrmBroadHistory();dlg.ShowDialog();}

4、短信邮件插件化开发及设置

我们从上图可以看到,里面对于邮件和短信,都定义了接口,用于具体模块的实现,自己可以实现这些接口,然后配置好exe.config里面的参数,就可以被调用了。

下面是我为短信和邮件接口开发了几个实现类,其中MyMailSend是发送邮件的实现类,其他几个是基于各种MAS短信接口和WebService接口的短信发送实现。

开发好后,在配置项里面设置一下插件的相关参数即可,如下所示的内容。

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之通用短信邮件通知模块,如需转载请自行联系原博主。

Winform开发框架之通用短信邮件通知模块相关推荐

  1. java-极光短信以及通知回调整合

    今天大Boss给小优优说,你给咱们的注册系统增加一下短信验证吧,然鹅小优优找了很多平台,像什么2xx.互亿xx了等等,后来一it好友告诉小优优,说用极光短信吧,毕竟人家就想做消息推送出身的,技术以及实 ...

  2. python监控短信_利用Python实现手机短信监控通知的方法

    日常运维工作中,通常是邮件报警机制,但邮件可能不被及时查看,导致问题出现得不到及时有效处理.所以想到用Python实现发短信功能,当监控到问题出现时,短信报警,使问题能得到及时的处理.当然,我相信,用 ...

  3. 开放性兼容短信邮件接口,支持各种语言接入的短信邮件平台-kewail

    兼容各种语言接入,有多种现成的demo直接调用,几分钟就能接入使用. demo下载链接:https://www.kewail.com/experience.html#anchor-1 106短信接口和 ...

  4. Winform开发框架之通用人员信息管理实现代码介绍

    我在上一篇<Winform开发框架之通用人员信息管理>随笔中介绍了这个通用人员信息管理的大致实现界面和思路,本篇就其中的实现细节做进一步的分析和共享,希望大家对其中的实现代码进行一个了解, ...

  5. SAP中用json数据格式调用http接口发送短信邮件案例

    在系统 VL02N 交货过账后触发发送邮件.短信的功能,短信邮件接口是经过第三方系统封装,然后开发出的API接口. 请求地址: http://180.167.01.01/ns/sends 请求方式: ...

  6. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

    最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...

  7. 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全

    创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 posted on 2017-02- ...

  8. 三方支付四方支付聚合支付系统 集成 支付宝分账 代付 多商户 短信邮件 谷歌令牌验证

    三方 四方支付聚合系统 集成 支付宝分账 短信 邮件 谷歌令牌多种验证 1.系统为成熟运营版,完美对接邮件系统2.短信系统为阿里和短信宝,可多通道切换 3.增加安全机制集成了谷歌令牌 4.成熟的商户, ...

  9. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

最新文章

  1. Python语言的应用领域
  2. python基础-函数(9)
  3. POJ 1741 Tree(树分治)
  4. 整理了一下目前的专栏文章,基本可以完整解决普通问题了 - 知乎专栏
  5. commons-lang3:DateUtils
  6. 程序员编程艺术第十一章:最长公共子序列(LCS)问题
  7. 【Kaggle】Intro to Machine Learning 第一次提交 Titanic
  8. matlab table中的文字转string_el-table 滚动条美化
  9. “章子欣父亲”账号发文造假实锤 百度新闻负责人:是我的锅
  10. 关于CSS HACK
  11. 机器学习之支持向量机算法(一)
  12. Eclipse安装Egit插件,egit安装特别缓慢
  13. redis---队列的操作
  14. 机器学习笔记(二)线性回归模型实现
  15. 微擎模块-微信门禁小区物业版(微信开门)
  16. RT-thread 环境下使用 HASH hwcrypto 配置使用底层硬件HAH库问题记录
  17. 零基础语法入门第九/十讲 使用疑问词进行提问和回答
  18. 【工具】笔记软件测评(简单)
  19. el-table中使用el-popover点击取消按钮时popover框的显示与隐藏问题
  20. 手把手教你用 tornado 设计 web 项目

热门文章

  1. typescript设置只读属性和任意类型
  2. vue-cli简单使用心得
  3. 基于Token进行身份验证
  4. Django模板语言
  5. 2017第35周日乱记
  6. 使用Markdown
  7. Linus Torvalds:回顾Linux20年
  8. 使用LOAD DATA和INSERT语句导入Mysql数据
  9. springCloud学习1(集中式配置管理)
  10. flutter进行自动编译操作步骤