需要一个用Python编写的POP3或IMAP服务器示例

7 投票
4 回答
12426 浏览
提问于 2025-04-16 07:16

我正在尝试通过电子邮件进行应用程序之间的消息传递。我已经搭建了自己的SMTP服务器,但现在缺少一个集中式的发送机制。我可以很容易地创建一个专有的发送机制,但我想使用一些标准的协议。我对HTTP、FTP或SOAP不感兴趣,只想专注于邮件协议。

我在网上找了一些Python的例子,但到目前为止没有找到合适的。我不想花太多时间和精力在这上面,因为这只是一个技术领域的研究,目的是看看通过电子邮件系统进行异步发送是否是一种可行的应用程序之间的通信方式。我知道有sendmail的解决方案,但我对此不感兴趣,因为我需要一个完整的Python解决方案,尽量使用现成的库,或者如果真的需要的话,可以考虑Twisted。

到目前为止,我只研究了IMAP和POP这两个标准。我还是不敢相信在这个时代,我们需要两个协议来发送和接收邮件。如果有什么可以合二为一的协议,我非常乐意去了解一下。

经过进一步调查,我认为唯一可行的选择是Twisted,如果有人能提供帮助,那就太好了。

更新 我放弃了POP/IMAP服务器,这工作量有点大,但回报却很少。不过,我使用了一个现成的服务器解决方案,它可以作为IMAP4提供电子邮件,并通过SMTP发送邮件。现在我找到了这个解决方案,我将继续研究通过电子邮件进行应用服务。目前我已经创建了一个应用程序,可以下载RSS源并以HTML格式发送邮件。邮件内容是由一个用Python编写的服务器应用程序进行过滤的,过滤出我感兴趣的内容。下一步是开发一种DSL语言,用于与服务器通信,有点像通过电子邮件进行telnet。应该会很有趣。之后还计划实现多应用程序之间的RPC邮件通信。

4 个回答

1

Quotient 是一个消息服务器,它支持电子邮件功能,基于一种叫做 Twisted 的技术。几年前,开发团队开始着手一个新的数据库层,最近的版本支持 SMTPPOP3 协议。虽然旧版本支持 IMAP4 协议。

2

我写了一个简单的基于电子邮件的消息队列,用于应用程序之间的通信。你可以在这里找到详细信息 http://blog.bootstraptoday.com/2010/11/28/really-simple-python-message-queue/

基本思路是: 1. 从smtpd.SMTPServer类派生一个新类。 2. 重写‘process_message’这个方法。 3. 在‘process_message’里启动一个线程。 4. 在线程函数内部,读取消息内容并执行任务。 5. 消息内容是简单的JSON对象。 6. 客户端代码很简单。客户端只需要向这个本地的SMTP服务器发送一封‘电子邮件’。将任务参数以JSON格式编码作为这封邮件的内容发送。所以客户端可以是一个简单的shell脚本。

总的来说,这大约是40到50行的Python代码。

有点类似的想法,但实现得更复杂,可以查看 Lamson : Deferred Processing To Queues

6

编辑:这里有一个简单的POP3服务器的例子,你可以在这个链接找到:http://code.activestate.com/recipes/534131-pypopper-python-pop3-server/。你需要替换消息服务的机制,但这本来就是你需要做的事情。想要了解使用Twisted实现的IMAP服务器,可以查看这个链接:https://github.com/davglass/twimapd

如果你想要使用电子邮件,那么你需要了解SMTP、POP和IMAP。这些都是电子邮件的基本组成部分。

实际上,对于邮件的发送,SMTP就足够了;而POP和IMAP主要是用来接收邮件的,如果你的应用程序可以直接相互连接,这两个协议其实用处不大。

如果你不一定要使用电子邮件,可能可以考虑其他的协议,比如XMPP(Jabber):http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol

撰写回答