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压缩说有一个模块时,我特别高兴!
因此,如果你是认真的,那么深入挖掘.你将学到很多东西.:)
我制作了两个库可以轻松解决其中一些问题:
这是两者的一个简短示例:
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 完全支持使用查询语言进行逻辑运算。您还可以轻松访问消息的各个部分。
链接,红邮件:
链接,红框:
归档时间: |
|
查看次数: |
28866 次 |
最近记录: |