我需要开发一个IMAP轮询器,每隔几秒就会对一个电子邮件服务器进行ping操作,并获取每个到达的新电子邮件。
我已经为另一个应用程序完成了一次,但是我使用了Spring Integration的入站邮件通道。
我刚开始玩“Play”,并且不确定实现这一目标的最佳方法是什么。我知道JavaMail已经提供了获取邮件的可能性,但我不确定如何实际打包它。这应该是一个单独的模块,一个单独的插件,一个服务,还是某个?
轮询功能是否应该作为一项工作实施?
注意:这是一个网络应用程序BTW,虽然上面的描述可能暗示它不是。
答案 0 :(得分:2)
有几种方法可以解决这个问题:
1)在作业中使用java定期轮询IMAP服务器
有关创建作业的文档是可用的并且非常简单,只需将作业设置为每分钟或5分钟运行一次,然后添加代码以实际检查新电子邮件。
http://www.playframework.org/documentation/1.2.4/jobs
如果您正在寻找如何在IMAP上查看新电子邮件,那么请查看堆栈交换。例如,要轮询gmail,请查看以下问题:Getting mail from GMail into Java application using IMAP
2)使用camel模块使用自定义路由/处理器轮询IMAP服务器
这是一个重量级的解决方案,只有在您想要使用Apache Camel的其他功能时才推荐使用。
该模块可在此处获取:http://www.playframework.org/modules/camel
使用camel来查询IMAP消息非常简单,一旦你了解如何使用camel,IMAP路由的具体信息就在这里:http://camel.apache.org/mail.html
答案 1 :(得分:0)
在我看来,如果我理解你的要求,你根本不应该使用Play。 Play是一个旨在处理 HTTP请求的Web框架。您的要求根本不说HTTP,所以Play的很大一部分!没用。
你可以使用Play的服务器运行时和Job(和cron)架构来运行它,但是你会滥用框架的设施来解决它们从未想过的事情。您也可能继承Play中您不需要的应用程序/服务要求,例如您要构建的应用程序/服务(例如Python运行时)。
我认为你应该不使用Play,而是使用Spring将其创建为一个简单,直接的Java应用程序。使用Spring's scheduling capabilities,您可以轻松实现所需内容。
当然,当你打算在未来建立一个网络前端时,这将使它成为一个完全不同的故事。