我想抓住(从我的grails应用程序)发送到特定电子邮件地址的每封电子邮件,解析它,获取一些数据并将数据写入我的数据库。它的Exchange Server邮件。
我想我可以某种方式为给定的电子邮件帐户启动Outlook服务并检查收件箱文件夹,例如每10秒,如果有新邮件 - 获取它们。
这种方法可以吗?或者我应该使用一些服务?有人能指出我正确的方向吗?我有什么选择?谢谢!
答案 0 :(得分:2)
如果您的Exchange服务器支持IMAP,那么您可以使用普通的JavaMail机制连接到它并轮询新邮件或(更好)让服务器按如下方式将新消息推送到您的应用程序(错误处理省略,并且不幸的是,很多可能的错误条件......):
boolean finished = false
void setup() {
Properties props = new Properties()
props.setProperty("mail.store.protocol", "imaps")
Session session = Session.getDefaultInstance(props, null)
Store store = session.getStore("imaps")
store.connect("mailserver.example.com", "username", "password")
Folder inFolder = currentMailStore.getFolder("INBOX")
inFolder.open(Folder.READ_WRITE)
inFolder.addMessageCountListener(this)
while(!finished) {
inFolder.idle()
sleep(10000)
}
}
public void messagesAdded(MessageCountEvent e) {
for(Message m in e.messages) {
//...
}
}
idle
的想法是,每当有新消息到达时,服务器都会调用messagesAdded
方法(来自MessageCountListener
接口)。