NetAnalyzer笔记 之 十 通过邮件方式打造自己的bug反馈模块(C#)
在软件发布后,有个好的反馈系统,对我们后续的软件开发有着至关重要的影响,现今软件异常反馈功能模块已经成了软件中重要的组成部分了。但是对于个人软件开发者,尤其是对于我这种贫民个人软件开发者却是个不小的难题,服务器太贵了,玩不起啊 ~_~。
既然玩不了贵的,那我们就放弃吗,不,贫民有贫民的玩法,我们可以通过邮件方式完成一个简单的Bug反馈模块,那我们就开始吧!
一、核心部件
核心部分很简单,就是通过 System.Net.Mail; 命名空间下的 SmtpClient 类完成邮件发送任务,而具体使用方法是:
1.建立邮件正文(body)
1 MailMessage myMail = new MailMessage("ftianwen@126.com", "470200051@qq.com"); 2 myMail.IsBodyHtml = true;//为HTML格式 3 myMail.Subject = "程序调试信息"; //主题 4 myMail.Priority = MailPriority.Normal;//邮件信息级别 5 myMail.Body ="测试数据";//邮件正文
代码中的ftianwen@126.com和 470200051@qq.com分别是发送方和接收方的的E-mail地址
2.配置发送信息(smtp)
1 SmtpClient mySmtp = new SmtpClient("smtp.126.com"); 2 mySmtp.EnableSsl = true;//如果不想让别人通过抓包获取你的密码,请设置这里 3 4 //身份认证 5 mySmtp.Credentials = new System.Net.NetworkCredential("ftianwen@126.com", "XXX"/*对,我是密码,但是我不会告诉你*/); 6 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条信息反馈
部分邮件截图
模板展示