构建电子邮件客户端有多难python

构建电子邮件客户端有多难python,python,email,smtp,imap,email-client,Python,Email,Smtp,Imap,Email Client,我正在未知的领域冒险 我正在努力研究使用Python实现电子邮件客户端有多困难: 电子邮件检索 电子邮件发送 电子邮件格式 电子邮件呈现 此外,我想知道是否所有协议都易于/难以支持,例如SMTP、IMAP、POP3等 希望有人能给我指出正确的方向:)如果我是你,我会查看现有电子邮件客户端的源代码,以获得一个想法:雷鸟、精灵爪、小狗 根据您想要支持的一组功能,这是一个大项目。Python语言确实为其标准库中所需的协议提供了原始支持。然而,正确地使用then,以及正确地解析和组装“现代”电子邮

我正在未知的领域冒险

我正在努力研究使用Python实现电子邮件客户端有多困难:

  • 电子邮件检索
  • 电子邮件发送
  • 电子邮件格式
  • 电子邮件呈现
此外,我想知道是否所有协议都易于/难以支持,例如SMTP、IMAP、POP3等



希望有人能给我指出正确的方向:)

如果我是你,我会查看现有电子邮件客户端的源代码,以获得一个想法:雷鸟、精灵爪、小狗


根据您想要支持的一组功能,这是一个大项目。

Python语言确实为其标准库中所需的协议提供了原始支持。然而,正确地使用then,以及正确地解析和组装“现代”电子邮件可能很难做到

另外,你没有说如果你想为你的电子邮件客户端创建一个图形界面——如果你想有一个合适的图形界面——直到可用为止,这是相当多的工作

本地电子邮件存储将是更容易的部分-除非您希望正确实现mbox文件格式,以便其他软件可以轻松读取/写入您获取的消息,否则您可以使用ORM或面向对象数据库(如ZODB或MongoDB)将它们存储为Python对象

如果你想要的不仅仅是一个玩具式的电子邮件应用程序,你还需要做很多工作——正确地编码电子邮件标题,例如,服务器身份验证和安全身份验证以及传输层,对非ASCII消息的电子邮件文本体本身进行解码。尽管Python标准库上的模块确实实现了很多,但它们的文档缺少示例,一个完整的电子邮件客户端必须使用所有这些


当然,创建电子邮件客户端(即使是玩具客户端)的地方是查看最新的电子邮件RFC(你必须从这里选择,因为在谷歌上搜索“电子邮件RFC”的结果很差)。

我想你会发现很多客户端的重要部分都是预先打包的:

电子邮件检索——我认为许多Python库都涵盖了这一点

电子邮件发送-这并不难,很可能也包括在内

电子邮件格式-我知道这是涵盖,因为我只是用它来解析客户端的单部分和多部分电子邮件

电子邮件渲染-我会拍摄某种HTML渲染器。Mozilla项目中的渲染器有一个Python接口。我猜还有其他渲染引擎也有python接口。我知道wxWidgets有一些简单的HTML工具,重量会轻很多。试想一下,Mozilla引擎可能还有一系列您需要的其他功能。你必须研究每个部分

它比上面列出的要多得多。就像任何有价值的东西一样,它不是一天建成的。我会精确地列出你想要它做什么。然后开始组装一个原型。只需构建一个简单的框架来完成基本的工作。就像只支持没有html的消息文本部分一样。然后在此基础上再接再厉

我对Python提供的大量编码模块感到惊讶。我需要过滤html电子邮件消息、解析样式表、嵌入样式以及其他所有内容。我在某处的Python库中找到了我需要的几乎所有函数。当我发现一些css表单是gzip的,并且有一个用于此的模块时,我特别高兴


所以,如果你是认真的,那就开始吧。你会学到很多。:)

取决于要构建客户端的级别。您可以使用库快速创建一些内容,例如用于处理连接/数据。和一个图形用户界面。但这一切都取决于你完成后的水平

一个快速的基本工具:简单。(带图书馆)
写一封充满仇恨的电子邮件客户端:很难


您还可以找到一个可以参与的开源项目,而不是使用库。我建议看一下

我删除了C++标签,它看起来不像在Alpython中的C++相关:电池包括:SMTP、IMAP、POP3-,你想用UI构建一些东西吗?如果是这样的话,你想使用的就是UI,只需为现有的电子邮件客户端构建一个前端即可。决定你想了解哪些信息:标题、协议和字节,还是按钮和通知?很难找到合适的代码来清理电子邮件正文。我发现的几个用于清理电子邮件正文的代码示例破坏了很多电子邮件。正确显示电子邮件将是最难的部分。不是舒尔:任何正在生产和维护的电子邮件客户端(如thunderbird)的来源都将是巨大的,你将无法掌握如何继续,也无法从中学习任何东西。他需要一个“示例”电子邮件客户端…这正是他打算写的。我同意。这可能会被增加,因为雷鸟可能是在C++中完成的,如果他们没有记录它,代码看起来可能与许多C++语言完全不同。如果他们使用了很多适合C程序的实践,情况会变得更糟