Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I interrupt IMAP's IDLE?

I am using the Javamail API connecting to my IMAP server. Everything is working great with the javax.mail.Folder.idle() method. My listener gets called when a new mail comes in. However the problem is idle blocks forever, how do I interrupt it? How do I actually stop the listening without killing my Java program?

I've tried calling Thread.interrupt() on the idle'd thread. Nothing happens. I am running out of ideas.

like image 218
erotsppa Avatar asked Aug 25 '09 04:08

erotsppa


2 Answers

Performing any operation on that folder (from another thread) will cause idle() method to return immediately. So if you want to forcefully interrupt it, just call close() from a new thread.

like image 178
ChssPly76 Avatar answered Sep 24 '22 01:09

ChssPly76


If you read the documentation properly, and read the source code, you'll realise that you have to create a new thread for calling .idle().

Allocate that thread to a variable, and whenever you want call the interrupt() on that thread, or just ignore notifications!

If you need to get idle() going again, just rerun the thread!

I created something similar, so you might wanna check it out.

https://github.com/mofirouz/JavaPushMail/blob/master/src/main/java/com/mofirouz/javapushmail/JavaPushMailAccount.java

Good luck

like image 43
Mo Firouz Avatar answered Sep 23 '22 01:09

Mo Firouz