构建电子邮件客户端有多难? - Python

Rad*_*Hex 16 python email imap email-client smtp

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

我想弄清楚使用Python实现Email客户端有多难:

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

另外我想知道所有协议是否容易/难以支持,例如SMTP,IMAP,POP3,......


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

jsb*_*eno 27

Python语言确实为其标准库中所需的协议提供原始支持.然后,正确地使用,并正确地解析和组装"现代"电子邮件,可能很难做到.

此外,您没有说是否要为您的电子邮件客户端创建图形界面 - 如果您想要一个合适的图形界面 - 直到可用,这是相当多的工作.

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

如果你想要的不只是一个玩具电子邮件应用程序,你将需要做很多工作 - 正确编码电子邮件标题,例如,服务器身份验证和安全身份验证和传输层,解码电子邮件文本正文本身ASCII消息.尽管Python标准库上的模块确实实现了很多,但是他们的文档不能用于实例 - 而完整的电子邮件客户端则必须全部使用.

当然,启动电子邮件客户端,甚至是玩具客户端的地方,将会查看最新的RFC电子邮件(您必须从这里选择http://www.ietf.org/ rfc/rfc-index因为只是在谷歌上寻找"电子邮件rfc"给出了糟糕的结果).


小智 5

我想你会发现许多客户预先包装的重要部件:

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

电子邮件发送 - 这并不难,也很有可能.

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

电子邮件渲染 - 我会拍摄某种HTML渲染器.Mozilla项目的渲染器有一个Python接口.我猜也有其他渲染引擎也有python接口.我知道wxWidgets有一些简单的HTML设施,重量会轻很多.考虑一下,Mozilla引擎可能还有许多其他功能.你必须研究每个部分.

它比上面列出的要多得多.像任何有价值的东西,它不会在一天内建成.我会准确地列出你想要它做的事情.然后开始整理原型.只需构建一个执行基本操作的简单框架.就像它只支持没有html的消息的文本部分一样.然后建立在那.

我对Python提供的大量编码模块感到惊讶.我需要过滤HTML电子邮件,解析样式表,嵌入样式以及其他所有东西.我在某个Python库中找到了我需要的所有函数.当我发现一些css表被gzip压缩说有一个模块时,我特别高兴!

因此,如果你是认真的,那么深入挖掘.你将学到很多东西.:)


mik*_*sus 5

我制作了两个库可以轻松解决其中一些问题:

这是两者的一个简短示例:

from redbox import EmailBox
from redmail import EmailSender

USERNAME = "me@example.com"
PASSWORD = "<PASSWORD>"

box = EmailBox(
    host="imap.example.com", 
    port=993,
    username=USERNAME,
    password=PASSWORD
)

sender = EmailSender(
    host="smtp.example.com", 
    port=587,
    username=USERNAME,
    password=PASSWORD
)
Run Code Online (Sandbox Code Playgroud)

然后您可以发送电子邮件:

email.send(
    subject='email subject',
    sender="me@example.com",
    receivers=['you@example.com'],
    text="Hi, this is an email.",
    html="""
        <h1>Hi,</h1>
        <p>this is an email.</p>
    """,
    attachments={
        'data.csv': Path('path/to/file.csv'),
        'raw_file.html': '<h1>Just some HTML</h1>',
    }
)
Run Code Online (Sandbox Code Playgroud)

或阅读电子邮件:

from redbox.query import UNSEEN, FROM

# Select an email folder
inbox = box["INBOX"]

# Search and process messages
for msg in inbox.search(UNSEEN & FROM('they@example.com')):

    # Process the message
    print(msg.headers)
    print(msg.from_)
    print(msg.to)
    print(msg.subject)
    print(msg.text_body)
    print(msg.html_body)

    # Set the message as read/seen
    msg.read()
Run Code Online (Sandbox Code Playgroud)

如果您需要复杂的逻辑运算,Red Box 完全支持使用查询语言进行逻辑运算。您还可以轻松访问消息的各个部分

链接,红邮件:

链接,红框: