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

既然玩不了贵的,那我们就放弃吗,不,贫民有贫民的玩法,我们可以通过邮件方式完成一个简单的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. TP框架多表联查

    join方法import("@.ORG.Page");        $Form   =   M('gly');        $where='';        if ($_PO ...

  2. ListActivity ListView 使用 介绍 用法

    ListActivity简单的说就是ListView和Activity的结合,跟ListView和Activity组合实现的没有什么很大的差别,主要是比较方便. 在实现时,要注意: 1.一般情况,Li ...

  3. OD: Vulnerability Detection

    终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...

  4. MySQL安装与测试

    工作室老师要求我们把MySQL装出来 今天折腾了下,本来不难的,不知道为什么用最新5.6.24的msi安装包,安装的时候选完路径后就没有后续了..蛋疼的我试了好几次,用cmd命令测试一直是 2003- ...

  5. java反射新的应用

    利用java反射动态修改运行中对象的私有final变量,不管有没有get方法获取这个私有final变量. spring aop 本质是cglib,动态代理 可以做很多事情 query.addCrite ...

  6. apache也可以做负载均衡,跟nignx的区别是什么?

    后续更新中.. 参考 http://zhumeng8337797.blog.163.com/blog/static/100768914201242211633248/ 比较 http://zhan.r ...

  7. ORACLE输出详细错误信息错误行数

    ... COMMIT; --输出成功信息 DBMS_OUTPUT.PUT_LINE('RUN RESULT: SUCCESS'); EXCEPTION WHEN OTHERS THEN BEGIN R ...

  8. web项目环境搭建(3):搭建Spring+MyBatis

    spring 4.1.7 + MyBatis 3.3 正式开始配置关键内容,这是硬货 一. 新建spring配置文件,起名为 applicationContext.xml,放在src/main/res ...

  9. php生成短网址的思路与方法

    生成短网址的思路以及使用php生成短网址的实现方法. 生成短网址的思路:如果把短网址还原了,你知道是个什么样子的吗?比如:http://www.jbxue.com/sitejs-17300-1.htm ...

  10. Java导入证书失败Keystore was tampered with, or password was incorrect

    keytool 错误: java.io.IOException: Keystore was tampered with, or  password was incorrect   在进行证书相关操作, ...