【问题标题】:How hard is it to build an Email client? - Python建立一个电子邮件客户端有多难? - Python
【发布时间】:2011-08-04 14:03:12
【问题描述】:

我正在这里冒险未知的领域......

我正在尝试计算使用 Python 实现电子邮件客户端的难度:

  • 邮件检索
  • 电子邮件发送
  • 电子邮件格式
  • 电子邮件呈现

我还想知道是否所有协议都易于/难以支持,例如SMTP、IMAP、POP3、...


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

【问题讨论】:

  • 我删除了 C++ 标签,它似乎与 C++ 无关
  • Python:电池包括:smtp、imap、pop3 - Internet ProtocolsInternet Data Handling
  • 你想用 UI 构建一些东西吗?如果是这样,并且您想要玩的是 UI,那么只需为现有电子邮件客户端构建一个前端。决定你想了解哪些细节:标题、协议和字节,还是按钮和通知?
  • 很难找到合适的代码来清理电子邮件正文。我发现的一些用于清理电子邮件正文的代码示例会破坏很多电子邮件。正确显示电子邮件将是最困难的部分。

标签: python email smtp imap email-client


【解决方案1】:

如果我是你,我会查看现有电子邮件客户端的源代码以获得一个想法:thunderbird、sylpheed-claws、mutt...

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

【讨论】:

  • Not shure:任何在生产和维护的电子邮件客户端(例如 Thunderbird)的来源都非常庞大,以至于人们能够掌握如何进行操作或从中学习任何东西。他需要一个“示例”电子邮件客户端……这正是他打算写的。
  • 我同意。这可能会成倍增加,因为 Thunderbird 可能是用 C++ 完成的,如果他们没有记录它,代码看起来可能与许多类似 C++ 的语言完全不同。如果他们使用了很多针对 C 程序的实践,情况会变得更糟
【解决方案2】:

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

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

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

如果您想要的不仅仅是一个玩具电子邮件应用程序,您将需要做很多工作 - 正确编码电子邮件标头,例如,服务器身份验证和安全身份验证和传输层,电子邮件文本正文的解码本身用于非 ASCII 消息。尽管 Python 标准库中的模块确实实现了很多这样的功能,但它们的文档缺少示例 - 并且一个完整的电子邮件客户端必须使用所有这些。

当然,启动电子邮件客户端(甚至是玩具客户端)的地方是查看最新的电子邮件 RFC(您必须从这里选择 http://www.ietf.org/rfc/rfc-index,因为只是在寻找google 上的“email rfc”结果不佳)。

【讨论】:

    【解决方案3】:

    我想你会发现很多客户的重要部件都是预先包装好的:

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

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

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

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

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

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

    因此,如果您是认真的,请深入研究。您将学到很多东西。 :)

    【讨论】:

      【解决方案4】:

      取决于您要构建客户端的级别。您可以使用 smtplib 之类的库快速创建一些东西来处理连接/数据。 tk 用于 GUI。但同样,这一切都取决于你完成后的水平。

      自己的快速基本工具:简单。 (带图书馆)
      编写一个功能齐全的电子邮件客户端:很难。

      除了使用库之外,您还可以找到可以贡献的开源项目。我建议看看Mailpile

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-03
        • 2014-08-02
        • 1970-01-01
        • 2022-01-13
        • 2020-01-16
        • 2011-05-04
        • 1970-01-01
        • 2010-11-09
        相关资源
        最近更新 更多