EMail诞生记

Flask新手注册系统实战:从零实现邮箱验证与密码安全存储 Web注册系统是理解HTTP请求生命周期、表单处理与数据持久化的经典入门场景。其核心原理在于服务端接收用户输入、执行多层校验(格式、业务规则、唯一性)、安全哈希密码并持久化至数据库。技术价值体现在可控的安全实践——如手动SQL参数化防注入、bcrypt显式盐值管理、SQLite事务异常捕获,避免ORM抽象带来的认知盲区。典型应用场景包括MVP产品冷启动、教学沙盒环境搭建及全栈基础能力验证。本文以Flask+SQLite+原生SQL为技术栈,聚焦邮箱验证、密码二次确认与错误反馈等关键环节,还原真实新手从‘写不 阅读详情

前言:本文主要介绍EMail的原理和协议, 人物,公司,情节纯属虚构,请勿对号入座。

上个世纪80年代初,  小王从计算机系毕业了, 进入了很多人梦寐以求的MSHP公司,一入职老板就给小王安排了一个导师:资深的程序员老周 。

为每个新人都安排一个导师, 也是公司一直以来的好传统。 


老板要求老周带着小王尽快进入工作状态, 为公司设计一个简单的电子邮件系统。 

1

初次见面

周一的早上, 小王见到了师傅老周。


老周拍了拍小王的肩膀 : "小王, 听说你大学计算机学的不错, 老板交代的可是你工作以来第一项任务, 一定要好好干啊"


"可是我实在不知道电子邮件系统是啥啊?! ”, 小王面露难色。


"主要是你不了解背景”  老周说,“其实是这样的, 我们公司有很多IBM刚出的兼容机, 甚至都有服务器了, 所以老板想设计开发一个系统, 让大家都能够像现实中邮局和信箱一样,通过电脑网络快速的发信,收信。这样工作效率就能提高了”


小王觉得这很不可思议,简直是天方夜谭, 因为这才80年代初, 个人电脑才刚刚开始兴起。


" 这可能吗? 通过电脑来发信,收信, 听起来很不可思议啊。"  小王问。


"不难不难, 其实我们的电脑已经能联网了, 听说过TCP/IP吧, TCP/IP已经能让两个主机进行通信了,我们只要设计一个基于TCP/IP的系统就行。" 


小王了解过TCP/IP,知道这个东西能够在两个机器之间建立一个可靠的连接, 通过这个连接, 两个机器可以互相发送数据。


老周说: "小王你想想,要是你来设计这个电子邮件系统, 模拟一下咱们人类的邮局,你会怎么办?"


小王想了想说: “我们可以在个人电脑上写个程序, 存储每个人的信件, 就像家门口的真实信箱一样, 然后把服务器当成邮局。”


老周问道: 那假设我给你写了信, 先发给了服务器(邮局), 服务器怎么才能发到你的个人信箱呢?


小王想说服务器可以连接个人电脑, 然后把信发过来啊, 但转念一想, 服务器不可能主动的去连接个人电脑, 因为个人电脑可能处于关机状态, 并且ip地址会变化, 服务器没法主动去连接。 


"奥,对了,服务器一般很稳定,轻易不关机, 也不会变化"   小王说, "我们不能把邮箱放到个人电脑上, 应该放到服务器上, 每个人开辟一块空间"


"这注意不错, 咱们给每个人的空间起个名称吧,  叫做 用户名@服务器名  , 例如 xiaowang@mshp.com    ,如何?"


小王暗暗佩服, 不愧是老司机,  这个 @ 起的太好了, 英文发音  "at" , 意义就是在某某地方, 关键是 @这个字符比较生僻, 很少人会用它做用户名。

 

小王说: 好,我们可以开发一个程序, 就叫做QuickMail吧,   我可以用QuickMail 来向服务器上的你的邮箱发信 ,   你也可以用他从服务器上收信了。 


老周说: 不错, 我们还得开发一个服务器端的程序,用来接收收件,存储起来, 我们叫他QuickMailServer 吧, 我们来确定一下邮件里有啥东西吧, 还可以和真实的信件类比。 


"那肯定有: 发件人, 收件人, 发件人地址 , 收件人地址,加个邮件标题吧, 还有邮件正文。  ”   小王接着说   “奥,不对, 在电脑的世界里, 发件人和发件人地址, 收件认和收件人地址都是相等的, 都是xxx@xx.com”


“所以呢, 收件人, 发件人, 标题,正文, 足够了”

老周说: "电脑世界里, 我们可以轻松的把一封信发给多个人, 所以收件人可以是个列表"


俩人讨论的热火朝天,没想到老板已经站在他们身后多时了。


老板说: “我有些信发给某个人, 还想抄送多个中层干部, 加个抄送人吧,也要支持列表 ; 另外, 有时候我想让某个人例如老周悄悄的看到一封信, 而别人不知道这个信被老周看了, 所以给我加个密送的功能。”


小王心想:还是老板厉害,深谋远虑啊。 


老周说:今天先到这里吧, 你再复习下TCP/IP, 我们未来编程要用到, 明天咱们确定下协议的事情。


第一天,小王和老周确定了电子邮件的格式: 发件人,收件人,抄送,密送, 标题,正文。

还得到了这样一个设计:

0?wx_fmt=jpeg

2

协议

周二一大早, 小王就迫不及待的找师傅老周问:" 师傅, 你昨天说到的协议是个啥东西? "


 "恩, 协议,简单的说就是双方比如两个电脑之间进行沟通的一种约定。 "

举个例子吧, 你是PC机 (Client),我是服务器(Server),   我们之间可以这么约定:


Client:  服务器你好

Server: 你好

Client:  现在几点了?

Server: 北京时间下午3点40分56秒

Client:  再见

Server: 再见


这就是一种协议 ,假设你说了一句协议之外的话, 例如:

Client: 今天天气如何?


那我就不能识别了,因为不在协议(约定)中。 


小王说: "我明白了, 我来设计一个发送邮件的协议吧。 "


两个小时后, 小王拿出了初稿:

0?wx_fmt=jpeg

(点开放大看细节)

"不错, 考虑的挺仔细, 首先考虑到了端口问题,这是TCP要求的   其次发数据那块儿, 我还以为你想不到用什么作为发送数据的结尾呢。“老周说

”不过有个小问题,数据在网络上传输, 中文是不行的,需要进行编码, 把他们变成ASCII码, 也就是ABCDEFabcd1234这些字符“


小王说:"那该怎么办?"


"我听说过一个叫做Base64的东西, 可以把二进制的数据变成小写字母a-z、大写字母A-Z、数字0-9、符号'+'、'/'、'=' 等字符组成的数据“ 老周说


“这是加密吗 ?” 小王问。


“不是加密, 加密一般是用个密钥把一段明文变成密文, 没有密钥你是没法把密文还原成明文的, 这个Base64只是一种编码而已,规则是已知的, 你可以轻松的把编码过的东西还原。”

 

老周拿那封信的正文举了个例子, “为了庆祝产品发布, 今晚在海底捞聚餐”经过base 64编码就会变成这个样子:

5Li65LqG5bqG56Wd5Lqn5ZOB5Y+R5biD77yMIOS7iuaZmuWcqOa1t+W6leaNnuiBmumkkA==

这完全是ASCII码了。 


(码农翻身注:网上有很多在线的Base64编码,解码网站, 大家可以试验一下)


老周说:要不我们把收信的协议也趁热打铁的设计出来吧。 


小王说: “好的”


两个小时后。。。

0?wx_fmt=jpeg

(点开放大看细节)

老周说: "看来你考虑了用户登录的问题, 这个很重要, 自己的邮箱应该是私密的,别人不能访问"


“那我们发信的时候是不是也要做用户登录啊, 如果不是我们系统的用户,就不能发信。”


"应该加上, 如果没有控制, 还可能会出现乱发邮件而无法追踪的问题"


小王说: “好的 , 我完善下,对了师傅, 咱们能不能给这个协议起个名字啊?”


老周说: “发信就叫 "Simple Mail Transfer Protocol" 简称SMTP,   收信叫做 Post Office Protocol , 简称 POP吧。 ”


小王又问: “我想起了个问题, 发信的时候能不能在正文里加上图片,文件这些东西, 这样用起来就更方便了。”


老周: “看来你已经站在用户的角度来思考了, 确实需要加上, 不过我们明天再来设计吧”


(码农翻身注:为了简化起见,  此次设计的协议和真实的SMTP和POP3不完全一致,请大家以标准协议为准)


(未完待续,下次预告 : 让邮件支持附件, 多个邮件服务器,Webmail的创业故事)


热门文章:

我是一个线程

我是一个Java class

Javascript: 一个屌丝的逆袭

CPU 阿甘

IE为什么把Chrome和火狐打伤了

Node.js :我只需要一个店小二

假如我是计算机系老师

假如时光倒流,我会这么学Java


0?wx_fmt=jpeg

公众号: 码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

Flask新手注册系统:从零实现用户注册与密码安全存储 Web注册功能是后端开发的入门核心场景,涉及HTTP请求处理、表单数据解析、数据库持久化及密码安全防护等基础能力。其底层原理基于GET/POST方法语义区分、request.form参数解析、SQLite轻量级存储与bcrypt加盐哈希机制,技术价值在于以最小依赖(Flask+bcrypt+sqlite3)构建可运行、可调试、可验证的闭环流程。典型应用场景包括学习型项目、MVP原型验证和教学实践,尤其适合Python基础扎实但缺乏Web开发经验的新手。本文聚焦‘极简注册动线’,完整呈现从HTML表单提交、F 阅读详情

相关推荐

Flask新手注册系统实战:从零搭建安全可用的用户注册流程

用户注册是Web应用最基础的身份入口,其本质是HTTP表单提交、服务端验证、密码安全存储与数据库持久化的完整闭环。理解这一流程需掌握请求响应机制、CSRF防护原理、密码哈希必要性及SQLite轻量事务特性。技术价值在于以最小依赖(Flask+Werkzeug+WTForms+SQLite)实现防重复、防明文、防伪造的核心安全能力,适用于内部工具登录、MVP产品验证、教学实验等低并发但高可靠需求场景。本文聚焦真实新手视角,详解如何绕过Django/FastAPI等重型框架,用原生Flask构建可运行、可调试、

weixin_34082854的博客 441

Email发展历史

  据我所知:1987年9月20日,有“中国互联网第一人”之称的钱天白从北京经意大利向前联邦德国卡尔斯鲁厄大学发出了中国第一封电子邮件,内容是“ 穿越长城,走向世界”。这是中国人在网络上的第一步,他开创了中国网民的先河。   1998年3月,第一个由中国人自己开发的免费邮件系统Coremail,在丁磊和陈磊华的努力下诞生了,对于中国互联网,这是具有符号意义的事件。这第一套免费邮件系统很快被丁磊挂...

weixin_33800463的博客 1415

Flask新手注册系统:从零实现安全用户注册全流程

Web用户注册是全栈开发的基础能力,其本质是前端表单与后端服务的协同交互,涉及HTTP请求处理、数据校验、密码安全存储及数据库事务管理等核心原理。技术价值在于建立最小可行的用户身份认证闭环,为登录、会话、权限等后续功能奠定数据与安全基础。典型应用场景包括个人项目起步、教学实验、内部工具搭建及MVP产品验证。本文以Flask为框架,聚焦真实新手视角,详解如何用SQLite+WTForms+werkzeug.security构建具备邮箱查重、密码哈希、CSRF防护和错误反馈的健壮注册系统,覆盖从项目初始化、表单

weixin_30628801的博客 334

Email诞生记(下)

上次在《Email诞生记》说到小王和老周设计了电子邮件的系统, 但是不能支持附件 -- 这也是本文要解决的重点。3附件小王回去后想了很久, 怎么才能给在邮件中加上附件呢...

码农翻身 1348

Skill工程:用开放标准重构AI协作范式

AI能力封装正从非结构化的Prompt工程,迈向标准化、可验证、可编排的Skill工程——这是一种以能力契约为核心的新型接口范式。它将AI功能抽象为带输入输出Schema、SLA约束与安全策略的‘数字员工’,通过统一注册发现机制实现跨系统自动协同。相比依赖人工调试的提示词,Skill工程提供可复用性、可组合性与可审计性,支撑企业级AI中台建设、智能体编排及多组织能力共享。本文深入解析Skill的构成要素、开放标准实践(如OSI)、Registry设计原理及生产级治理方案,覆盖产品经理、后端工程师与技术负责人

diaoqi6581的博客 434

Git alias 配置实战:提升开发效率与团队协作的配置层API

Git alias 是 Git 内置的命令映射机制,本质是配置层的轻量级 API,不依赖 shell 环境、无需额外工具,通过 .gitconfig 实现跨平台、跨终端的一致行为。其核心原理在于 Git 进程启动时解析 alias 配置并重写命令流,具备环境无关性、可继承性和安全边界。技术价值体现在降低输入错误率、固化高频操作肌肉记忆、强化操作防护(如 force-push 二次确认)及支撑团队规范落地。典型应用场景包括日常状态查看(git st)、分支切换(git co)、可视化日志(git lg)、差异

weixin_30797199的博客 343

AI编排实战:MuleSoft+LangChain构建企业级AI交响指挥系统

AI编排(AI Orchestration)是打通大模型与企业核心系统的关键技术,其本质是通过标准化数据流转、确定性服务治理与可解释AI逻辑,在复杂异构环境中实现‘对的数据、对的模型、对的流程’协同。它既不是单纯调用LLM的Prompt工程,也不是传统ESB的简单升级,而是融合API集成、业务规则引擎、向量检索与合规管控的分层架构范式。在金融、制造、SaaS等强治理场景中,MuleSoft提供企业级数据管道的契约性与审计能力,LangChain则承载动态推理与语义理解,二者协同解决数据断层、能力断层与治理断

332

模板驱动型文档自动化:从填空到智能交付的技术实践

模板驱动型文档自动化是一种以预定义结构化模板为核心,通过动态内容填充、样式继承与条件逻辑编排实现标准化文档批量生成的技术范式。其原理在于将业务规则编码进模板的占位符、样式链与动态区块中,替代人工重复操作,保障输出一致性与合规性。相比AI生成侧重内容创作,该技术更强调确定性、可审计性与品牌可控性,具备低代码、高复用、多格式一致等工程优势。典型应用场景覆盖销售提案、法律合同、培训手册、医疗SaaS方案等需高频交付、强格式约束的业务文档。本文深入解析Sqribble模板引擎在结构化占位符、样式继承链、动态区块管理

cishan3804的博客 407

OpenClaw:面向工程师的本地化AI编程操作系统

AI编程操作系统是一种将大语言模型与本地开发环境深度集成的新型工具范式,其核心在于通过命令行接口(CLI)实现确定性调度、以可审计的Skill单元封装真实世界操作能力,并依托本地部署保障数据主权与系统亲和力。相比传统代码补全工具,它强调Agent主动理解工作流而非被动响应光标;相比云端AI助手,它支持直接访问.gitconfig、SSH密钥、内网API等敏感上下文。OpenClaw正是这一范式的典型实践,提供YAML定义Skill、POSIX兼容执行、LLM后端灵活切换等关键能力,适用于运维提效、Agent

weixin_34377919的博客 439

MuleSoft+LLM企业级AI编排:打通大模型与ERP/CRM的生产级集成

大语言模型(LLM)作为新一代智能引擎,其真正价值不在于单点对话能力,而在于深度融入企业核心业务系统——如SAP、Salesforce、ServiceNow等承载真实事务的ERP/CRM平台。实现这一融合的关键,在于可靠的API编排与数据治理能力:需将LLM的非结构化语义理解,精准转化为符合企业系统契约的结构化指令,并反向注入实时、可信、可审计的业务上下文。MuleSoft Anypoint Platform凭借原生企业连接器、可视化流程编排、端到端数据血缘追踪及开箱即用的可观测性,成为跨越‘AI演示’与‘

weixin_33724659的博客 401

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

Trac-Slack 集成实战:用 Tracbot 实现事件驱动的智能通知

Trac 作为经典的开源项目管理工具,其 ticket 生命周期管理能力强大但信息封闭;Slack 则是团队实时协作中枢,二者割裂将导致状态不同步、响应延迟与协作熵增。本文围绕事件驱动架构原理,解析如何通过轻量级 Tracbot 插件,在不侵入 Trac 核心、不引入外部服务的前提下,实现 ticket 创建、状态变更、代码提交等关键事件的语义化 Slack 推送。技术价值在于零网络依赖、高上下文保真、配置即代码;适用于 DevOps 过渡期团队及 Trac 1.2–1.4 环境。核心热词:Tracbot、

weixin_30385925的博客 356

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

钓鱼邮件攻击全解析:从SMTP协议漏洞到社会工程学防御实战

网络钓鱼攻击是当前网络安全领域最常见的社会工程学攻击手段之一,其核心原理是利用邮件协议的基础缺陷和人性心理弱点。SMTP协议在设计之初缺乏强制的身份验证机制,使得攻击者能够轻易伪造发件人地址、操纵邮件头信息,这是钓鱼邮件得以广泛传播的技术基础。通过结合相似域名欺骗、显示名伪装等技术手段,攻击者能够制作出极具迷惑性的钓鱼邮件。这类攻击的技术价值在于其低成本、高回报的特性,能够绕过传统安全设备的静态检测,直接针对组织中最薄弱的环节——人员。在实际应用场景中,钓鱼邮件常被用于窃取登录凭证、传播恶意软件、实施金融诈

weixin_33690963的博客 333

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

模板驱动文档自动化:零代码实现业务人员自助生成

文档自动化是企业提升运营效率的关键技术路径,其核心在于解耦内容与格式,通过模板引擎实现结构化渲染。相比AI生成易导致责任模糊、数据不一致和审计缺失,也区别于代码定制带来的高维护成本与知识壁垒,模板驱动方案以零代码、可视化、强可控为特征,天然适配市场、销售、法务等非技术人员。它依托占位符(如{{client_name}})、条件区块与循环列表等轻量逻辑,结合API/CSV等数据源绑定,支撑合同、对账单、报价单等高频文档的批量精准生成,在金融、SaaS、医疗等强合规场景中保障可追溯性与版本一致性。

Dendy之Java小屋 331

【全网最全最详细】智能体提示词prompt教程

定义:提示词是用户输入给AI模型(如ChatGPT、MidJourney等)的指令或问题,用于引导模型生成特定类型的输出。它是用户与AI交互的核心媒介。作用:提示词的质量直接影响AI输出的准确性和相关性。好的提示词能明确任务边界、减少歧义,并激发模型的创造力。提示词就是“给AI下指令的说明书”——越清楚、越具体,AI干得越好!帮你更快、更准地拿到想要的结果,不用和AI“猜谜语”。

qq_38196449的博客 8220

AI Agent落地实战:自主决策、环境交互与分层架构设计

AI Agent并非简单调用大模型的智能助手,而是一种具备感知—推理—行动闭环能力的工程化系统。其核心原理在于将复杂任务解耦为可验证、可隔离的职责单元,并深度适配真实业务环境——包括API稳定性、数据噪声、规则变更等动态变量。技术价值体现在高可靠决策(如92%准确率)、低延迟响应(350ms内)与强容错能力(故障自动降级)。典型应用场景覆盖电商退货自动化、工业预测性维护、慢病管理干预等需实时判断与多系统协同的领域。本文聚焦生产级AI Agent的分层架构实践,深入解析感知、决策、执行与协调四层如何协同工作,

vanadiumlin 181

DFRobot MGC3130电容式手势传感器库深度解析

电容式近场感应(Electric Near Field Sensing)是一种非接触、抗干扰的三维空间感知技术,其原理基于人体介电特性对高频电场的扰动响应,具备低功耗、高鲁棒性与零物理接触等核心优势。该技术广泛应用于医疗人机交互、工业HMI、智能家电等对可靠性与环境适应性要求严苛的嵌入式场景。DFRobot_MGC3130库正是面向Microchip MGC3130芯片的工程化实现,封装了I²C驱动、ASU硬件加速调度及多层抽象API,支持手势识别、触控检测与接近唤醒等功能动态切换。结合电容式近场感应与嵌入

weixin_34620658的博客 550

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2622
上一篇: Http历险记(下)-- Struts的秘密
下一篇: Email诞生记(下)
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值