在软件发布后,有个好的反馈系统,对我们后续的软件开发有着至关重要的影响,现今软件异常反馈功能模块已经成了软件中重要的组成部分了。但是对于个人软件开发者,尤其是对于我这种贫民个人软件开发者却是个不小的难题,服务器太贵了,玩不起啊 ~_~。

既然玩不了贵的,那我们就放弃吗,不,贫民有贫民的玩法,我们可以通过邮件方式完成一个简单的Bug反馈模块,那我们就开始吧!

一、核心部件

核心部分很简单,就是通过 System.Net.Mail; 命名空间下的 SmtpClient 类完成邮件发送任务,而具体使用方法是:

1.建立邮件正文(body)

  MailMessage myMail = new MailMessage("ftianwen@126.com", "470200051@qq.com");
myMail.IsBodyHtml = true;//为HTML格式
myMail.Subject = "程序调试信息"; //主题
myMail.Priority = MailPriority.Normal;//邮件信息级别
myMail.Body ="测试数据";//邮件正文

代码中的ftianwen@126.com和 470200051@qq.com分别是发送方和接收方的的E-mail地址

2.配置发送信息(smtp)

  SmtpClient mySmtp = new SmtpClient("smtp.126.com");
mySmtp.EnableSsl = true;//如果不想让别人通过抓包获取你的密码,请设置这里 //身份认证
mySmtp.Credentials = new System.Net.NetworkCredential("ftianwen@126.com", "XXX"/*对,我是密码,但是我不会告诉你*/);
mySmtp.Send(myMail);

代码比较简单:

第一步 通过邮件服务商(发送邮件地址对应的服务提供商)得到stmp服务器域名,通过域名实例化一个SmtpClient ;

    第二步 配置安全设置以及身份认证信息

第三步 发送邮件

二、服务配置

对于一些邮箱服务大部分还要开启相关的服务,以允许第三方软件的接入(如上面我们做的软件),这里用126邮箱为例进行设置

这样,我们就可以使用这个邮箱服务在我们的软件上面进行邮件收发了,同时大家注意一下截图下面的提示,在这里我们可以看到服务器的地址,如接受邮件的pop3和imap服务器,发送邮件的smtp服务器等地址信息。

tips:如果通过上面设置了参数还是无法发送邮件,请使用foxmail等客户端邮件软件先登录一下在试,经验之谈,无实际依据

三、安全性

通过上面的代码,我们完成了bug反馈的核心部分,而且已经可以使用了,那么现在来谈谈本篇的核心——安全性问题。

相信大家已经看到了这句代码  mySmtp.EnableSsl = true; 这句的意义就是使用SSL方式发送邮件,用以保护密码的安全,那么下面来看看加这句与不加这句的区别

没使用SSL:

使用了SSL:

由上面的对比图可知,当没有使用SSL的时候无论是登录邮箱的账号,密码以及内容都可以很轻易的获取到(通过Base64解码可获得)

而使用了SSL,则不用担心。(因为我的软件就是做协议分析的,初时不知道SSL方式,一度移除过BUG反馈这个功能!!)

解决了网络传输过程中的密码泄密,还有一个问题,就是密码存放的位置,因为对于.net程序,很容易就可以通过反编译获取到代码,所以无论密码直接写在程序中,或者通过文件读入,以及密码字符串是否加码,都可以通过解析代码获得,我曾经就遇到过一个网友,   拿到了我的密码,因为我的密码是直接写在代码中的,并使用了一些掩耳盗铃的方式进行了编码,很容易获取得到,不过哥们挺好,找我聊了一下,并没有做其他的事情。

但是问题总是需要解决的,于是我想到了代码混淆和字符串加密,试了一下效果不错

但是我知道这个其实也没用,如果再往深入一点就可以通过一些更加高级的反编译工具访问寄存器等存储空间获取到,不过我觉得既然技术都这么牛逼了,应该不至于无聊到做这种无用的事情了吧 ^_^

当然除了通过技术手段防止密码破解之外,我还绑定了自己的常用邮箱,手机号等信息,有时候当技术无法满足需求时候,通过一些非技术手段可能会起到事半功倍的效果。

四、成品

前面扯了那么多,咱们开始检验一下吧,运行软件,发送邮件,成功

怎么获得bug一集如何设置发送模板应该不需要我在这里再唠叨了吧。

那么最后看看我使用这个模块的效果吧

自从启用该模块以来累计接受了138条信息反馈

部分邮件截图

模板展示

NetAnalyzer笔记 之 十 通过邮件方式打造自己的bug反馈模块(C#)的更多相关文章

  1. NetAnalyzer笔记 之 十四 NetAnalyzer 6.0 的使用方法 -- 3.协议分析与统计

    数据分析 完成了数据的抓取,那么接下来就是NetAnalyzer的第二个重点部分了,协议分析作为整个软件的核心之一,在最新的NetAnalyzer中已经得到了巨大的提升.NetAnalyzer中协议分 ...

  2. NetAnalyzer笔记 之 十二 NetAnalyzer 6.0 的使用方法 -- 1.初识NetAnalyzer

    上次写NetAnalyzer使用方法是2016年的时候了,在后来NetAnalyzer经过了巨大的版本更变,但是因为个人原因,一直未对使用方法进行更新,现在NetAnalyzer最新的6.0已经发布了 ...

  3. NetAnalyzer笔记 目录

    目录 NetAnalyzer笔记 之 一 开篇语 NetAnalyzer笔记 之 二 简单的协议分析 NetAnalyzer笔记 之 三 用C++做一个抓包程序 NetAnalyzer笔记 之 四 C ...

  4. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  5. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  6. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  7. PMBOK(第六版) PMP笔记——《十》第十章(项目沟通管理)

    PMBOK(第六版) PMP笔记——<十>第十章(项目沟通管理) 第十章 项目沟通管理: PM 大多数时间都用在与干系人的沟通上. 第十章有三个过程: 规划沟通管理:根据干系人的需求,制定 ...

  8. NetAnalyzer笔记 之 五 一些抓包技巧分享(不定期更新)

    [创建时间:2016-03-12 10:00:00] [更新时间:2016-05-21 10:00:00] NetAnalyzer下载地址 前一段时间应为工作关系,NetAnalyzer笔记系列已经很 ...

  9. NetAnalyzer笔记 之 九 使用C#对HTTP数据还原

    [创建时间:2016-05-12 00:19:00] NetAnalyzer下载地址 在NetAnalyzer2016中加入了一个HTTP分析功能,很过用户对此都很感兴趣,那么今天写一下具体的实现方式 ...

随机推荐

  1. Java多线程——线程的生命周期和状态控制

    一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...

  2. MVC项目,系统找不到指定的文件。(异常来自 HRESULT:0x80070002)

    今天在用Visual Studio新建MVC项目的时候,遇到错误 系统找不到指定的文件.(异常来自 HRESULT:0x80070002) 解决办法:工具--> 扩展和更新 -->联机(V ...

  3. java RSA签名

    try{ //1初始化秘钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); key ...

  4. ImageIO.wtrie生成jpg图片质量损失方案:BufferedImage生成jpg图片文件流

    Iterator<ImageWriter> iterator = ImageIO.getImageWritersByFormatName("jpeg"); ImageW ...

  5. C#中yield用法

    yield 关键字向编译器指示它所在的方法是迭代器块.编译器生成一个类来实现迭代器块中表示的行为.在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值.这是一个返回值, ...

  6. 注意mysql中的编码格式和php中的编码格式一致

    今天发现用php代码插入英文可以,但是中文插入不进去,注意编码要一致,@mysql_connect("localhost","root","12345 ...

  7. IIS 7.5 配置伪静态

    IIS 7.5 配置伪静态_win服务器_脚本之家 win7下IIS的安装和配置 图文教程详细出处参考:http://www.jb51.net/article/29787.htm http://blo ...

  8. OpenXml2.0 - 找不到类型或命名空间名称“DocumentFormat”

    在使用 OpenXml SDK2.0的过程中,很是郁闷的是总是报 '找不到类型或命名空间名称“SpreadsheetDocument”(是否缺少 using 指令或程序集引用?)'的错误,命名已经添加 ...

  9. mysql复制表

    create table 表名 like 要复制的表名  //复制表结构 insert into 表名 select * from 要复制的表名  //复制数据 方法2,一般不推荐,如果后台加数据,可 ...

  10. 2.2 文件 I/O 的基石:Path

    Path通常代表文件系统中的位置,能浏览任何类型的文件系统,包括zip归档文件系统: 文件系统中的几个概念:目录树.根目录.绝对路径.相对路径: NIO.2中的Path是一个抽象构造,你所创建和处理的 ...