python3邮件小软件,发送接收以及朴素贝叶斯筛选垃圾邮件(一)

       课余空闲时间自学了python,奈何一直没有机会练手,对于我这个不甘于闲着无聊的人来说这肯定是不行的。于是便写了这么一个python3的练习软件,最近也快完结了,便来补一补笔记,整理一下开发过程。

        项目链接:https://gitee.com/wolf_dpf/pye-mail


一、网络协议

        刚确定好项目的题目时,我的状态可以说是一头雾水、一脸茫然,完全不知道从哪入手开始。对于邮件客户端仅有的少数印象也就是outlook和python教程中提到的邮件客户端编程了。

        刚开始对我这个不太了解邮件网络协议的人来说,outlook就是个化腐朽为神奇的东西,它几乎可以连接所有的邮件服务商的邮箱:163、qq、sina等等。不管如何,先试试outlook再说。使用后才发现,原来想要用outlook登录邮件服务商的邮箱,需要去这些邮箱服务商网页邮箱开启相关的邮件协议才能。这越发的让我感受到了规范化标准化的重要,也向这些编写网络协议的前辈致敬。

        了解到了网络协议这点,我便又去问了问度娘,对比网络协议后就瞄准了smtp/pop3协议。python官方也对这两个邮件客户端协议进行了封装,因此便对这两个邮件协议进行了了解。

        smtp协议:简单邮件传输协议

        pop3协议:邮局协议

        而python对于两个协议的封装模块则分别是smtplib和poplib,现在python编写的客户端与邮件服务商邮箱交互部分问题的解决方案就初步确定了,然后就是考虑核心功能了——邮件筛选。

        一想到核心筛选功能就有点脑壳痛,满脑袋都是算法,朴素贝叶斯算法是最基础的机器学习算法,具体的算法思路我将在下一篇博客中给出,这里只作一个简单的介绍:

        朴素贝叶斯算法,由贝叶斯算法训练器 和 贝叶斯算法分类器组成,训练器通过读取训练集,算出训练结果,分类器通过读取计算训练结果来给出分类结果。(如果这里还是没有一个概念,可以先去看第二篇博客)

        现在就出现了一个选择,贝叶斯算法的实现是放在客户端还是服务端,放在客户端就意味着需要把训练数据放于前端(这并非没有例子,jieba模块的训练结果是放在前端的,这个模块同样放到第二篇用介绍)。但是在找了训练集后,发现训练结果规模还是有点大,其次考虑到功能复用,奔着训练的目的,便选择将算法的实现放在了后端。虽然可能造成服务端的负担,最后还是不过我我这里还是选择了放在服务端实现,考虑到以后的扩展性,以及是否存在继续开发成智能云服务器的可能。

        所以这里自然而然的出现了另一个问题,客户端和服务器的交互,实现自然而然地想到了通过TCP编程,了解了一下python对TCP的封装实现支持还是比较好用的。

二、总结

        到这篇博客结尾,这个小实验性软件所要学习了解的网络协议,以及基本的架构已经大体有了个认识。前端:负责登陆厂商的邮箱,接收发送邮件。后端,则是一个单纯的贝叶斯分类服务器。
 

猜你喜欢

转载自blog.csdn.net/Wolf_pfD/article/details/82892670